| Copyright | (c) 2010-2012 Bas van Dijk & Roel van Dijk |
|---|---|
| License | BSD3 (see the file LICENSE) |
| Maintainer | Bas van Dijk <v.dijk.bas@gmail.com> , Roel van Dijk <vandijk.roel@gmail.com> |
| Safe Haskell | Trustworthy |
| Language | Haskell98 |
Control.Concurrent.Thread.Group
Contents
Description
This module extends Control.Concurrent.Thread with the ability to wait for
a group of threads to terminate.
This module exports equivalently named functions from Control.Concurrent,
(GHC.Conc), and Control.Concurrent.Thread. Avoid ambiguities by importing
this module qualified. May we suggest:
import Control.Concurrent.Thread.Group ( ThreadGroup ) import qualified Control.Concurrent.Thread.Group as ThreadGroup ( ... )
- data ThreadGroup
- new :: IO ThreadGroup
- nrOfRunning :: ThreadGroup -> STM Int
- wait :: ThreadGroup -> IO ()
- waitN :: Int -> ThreadGroup -> IO ()
- forkIO :: ThreadGroup -> IO a -> IO (ThreadId, IO (Result a))
- forkOS :: ThreadGroup -> IO a -> IO (ThreadId, IO (Result a))
- forkOn :: Int -> ThreadGroup -> IO a -> IO (ThreadId, IO (Result a))
- forkIOWithUnmask :: ThreadGroup -> ((forall b. IO b -> IO b) -> IO a) -> IO (ThreadId, IO (Result a))
- forkOnWithUnmask :: Int -> ThreadGroup -> ((forall b. IO b -> IO b) -> IO a) -> IO (ThreadId, IO (Result a))
Documentation
data ThreadGroup Source
A ThreadGroup can be understood as a counter which counts the number of
threads that were added to the group minus the ones that have terminated.
More formally a ThreadGroup has the following semantics:
newinitializes the counter to 0.- Forking a thread increments the counter.
- When a forked thread terminates, whether normally or by raising an exception, the counter is decremented.
nrOfRunningyields a transaction that returns the counter.waitblocks as long as the counter is greater than 0.waitNblocks as long as the counter is greater or equal to the specified number.
Instances
new :: IO ThreadGroup Source
Create an empty group of threads.
nrOfRunning :: ThreadGroup -> STM Int Source
Yield a transaction that returns the number of running threads in the group.
Note that because this function yields a STM computation, the returned number
is guaranteed to be consistent inside the transaction.
wait :: ThreadGroup -> IO () Source
Block until all threads in the group have terminated.
Note that: wait = .waitN 1
waitN :: Int -> ThreadGroup -> IO () Source
Block until there are fewer than N running threads in the group.
Forking threads
forkIO :: ThreadGroup -> IO a -> IO (ThreadId, IO (Result a)) Source
Same as Control.Concurrent.Thread. but additionaly adds
the thread to the group.forkIO
forkOS :: ThreadGroup -> IO a -> IO (ThreadId, IO (Result a)) Source
Same as Control.Concurrent.Thread. but additionaly adds
the thread to the group.forkOS
forkOn :: Int -> ThreadGroup -> IO a -> IO (ThreadId, IO (Result a)) Source
Same as Control.Concurrent.Thread. but
additionaly adds the thread to the group.forkOn
forkIOWithUnmask :: ThreadGroup -> ((forall b. IO b -> IO b) -> IO a) -> IO (ThreadId, IO (Result a)) Source
Same as Control.Concurrent.Thread. but
additionaly adds the thread to the group.forkIOWithUnmask
forkOnWithUnmask :: Int -> ThreadGroup -> ((forall b. IO b -> IO b) -> IO a) -> IO (ThreadId, IO (Result a)) Source
Like Control.Concurrent.Thread. but
additionaly adds the thread to the group.forkOnWithUnmask