Copyright (c) 2010-2012 Bas van Dijk & Roel van Dijk BSD3 (see the file LICENSE) Bas van Dijk , Roel van Dijk Trustworthy Haskell98

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 )


Synopsis

# Documentation

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.

Instances

 Source # Methods

Create an empty group of threads.

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.

forkIO :: ThreadGroup -> IO a -> IO (ThreadId, IO (Result a)) Source #

Same as Control.Concurrent.Thread.forkIO but additionaly adds the thread to the group.

forkOS :: ThreadGroup -> IO a -> IO (ThreadId, IO (Result a)) Source #

Same as Control.Concurrent.Thread.forkOS but additionaly adds the thread to the group.

forkOn :: Int -> ThreadGroup -> IO a -> IO (ThreadId, IO (Result a)) Source #

Same as Control.Concurrent.Thread.forkOn but additionaly adds the thread to the group.

forkIOWithUnmask :: ThreadGroup -> ((forall b. IO b -> IO b) -> IO a) -> IO (ThreadId, IO (Result a)) Source #

Same as Control.Concurrent.Thread.forkIOWithUnmask but additionaly adds the thread to the group.

forkOnWithUnmask :: Int -> ThreadGroup -> ((forall b. IO b -> IO b) -> IO a) -> IO (ThreadId, IO (Result a)) Source #

Like Control.Concurrent.Thread.forkOnWithUnmask but additionaly adds the thread to the group.