RosettaCodeData/Task/Metered-concurrency/Haskell/metered-concurrency-2.hs
Ingy döt Net 776bba907c Sync
2013-10-27 22:24:23 +00:00

17 lines
585 B
Haskell

procedure main(A)
n := integer(A[1] | 3) # Max. number of active tasks
m := integer(A[2] | 2) # Number of visits by each task
k := integer(A[3] | 5) # Number of tasks
sem := [: |mutex([])\n :]
every put(threads := [], (i := 1 to k, thread
every 1 to m do {
write("unit ",i," ready")
until flag := trylock(!sem)
write("unit ",i," running")
delay(2000)
write("unit ",i," done")
unlock(flag)
}))
every wait(!threads)
end