RosettaCodeData/Task/Synchronous-concurrency/Icon/synchronous-concurrency.icon

20 lines
636 B
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
procedure main(A)
fName := A[1]|"index.txt"
p := thread produce(fName)
c := thread consume(p)
every wait(p | c)
end
procedure produce(fName)
every !open(fName)@>> # drop messages in p's outbox (blocking whenever box is full)
@>> # Signal consumer that p is done
write("count is ",<<@) # block until message in p's inbox
end
procedure consume(p)
i := 0
while write(\<<@p) do (i+:=1) # loop until empty message in p's outbox
# (blocking until each message arrives)
i@>>p # put row count into p's inbox
end