[Haskell-cafe] Re: Waiting for thread to finish

Brad Clow brad at bjclow.org
Tue Nov 27 19:34:04 EST 2007


If you would like to wait on multiple threads, you can use STM like so:

import Control.Concurrent
import Control.Concurrent.STM
import Control.Exception

main = do
  tc <- atomically $ newTVar 2
  run tc (print (last [1..100000000]))
  run tc (print (last [1..110000000]))
  print "Waiting...."
  atomically $ readTVar tc >>= \x -> if x == 0 then return () else retry
  print "OK."
  where
    run tc f = forkIO (f `finally` atomReplace (\x -> x - 1) tc)

atomReplace fn x = atomically $ readTVar x >>= writeTVar x . fn

Regards
brad

-- 
www.scoodi.com
Recycle is good: Reuse is better


More information about the Haskell-Cafe mailing list