Skip to content

Instantly share code, notes, and snippets.

@mwotton
Created January 31, 2012 01:32
Show Gist options
  • Save mwotton/1708089 to your computer and use it in GitHub Desktop.
Save mwotton/1708089 to your computer and use it in GitHub Desktop.
children :: MVar [MVar ()]
children = unsafePerformIO (newMVar [])
waitForChildren :: IO ()
waitForChildren = do
cs <- takeMVar children
case cs of
[] -> return ()
m:ms -> do
putMVar children ms
takeMVar m
waitForChildren
forkChild :: IO () -> IO ThreadId
forkChild io = do
mvar <- newEmptyMVar
childs <- takeMVar children
putMVar children (mvar:childs)
forkIO (io `finally` putMVar mvar ())
main =
later waitForChildren $
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment