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 |
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:
new
initializes 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.
nrOfRunning
yields a transaction that returns the counter.wait
blocks as long as the counter is greater than 0.waitN
blocks as long as the counter is greater or equal to the specified number.
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