Commit b07a2716 authored by simonmar's avatar simonmar

[project @ 2000-08-25 13:26:57 by simonmar]

Add a test (also benchmark) for threadDelay, Random, and QSemN.  This
test starts a large number of threads which all wait for a random
delay.  The semaphore is used to wait for them all to finish before exiting.
parent 5a4ec937
-- !!! test threadDelay, Random, and QSemN.
-- start a large number (n) of threads each of which will wait for a
-- random delay between 0 and m seconds. We use a semaphore to wait
-- for all the threads to finish.
import Random
import Concurrent
import Exception
n = 5000 -- no. of threads
m = 3000 -- maximum delay
main = do
s <- newQSemN n
(is :: [Int]) <- sequence (take n (repeat (getStdRandom (randomR (1,m)))))
mapM (fork_sleep s) is
waitQSemN s n
where
fork_sleep s i = forkIO (do waitQSemN s 1
threadDelay (i*1000)
signalQSemN s 1)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment