RosettaCodeData/Task/Metered-concurrency/Haskell/metered-concurrency-2.hs
2023-07-01 13:44:08 -04: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