RosettaCodeData/Task/Metered-concurrency/Julia/metered-concurrency.julia
2019-09-12 10:33:56 -07:00

21 lines
427 B
Text

function acquire(num, sem)
sleep(rand())
println("Task $num waiting for semaphore")
lock(sem)
println("Task $num has acquired semaphore")
sleep(rand())
unlock(sem)
end
function runsem(numtasks)
println("Sleeping and running $numtasks tasks.")
sem = Base.Threads.RecursiveSpinLock()
@sync(
for i in 1:numtasks
@async acquire(i, sem)
end)
println("Done.")
end
runsem(4)