Safe Haskell | Safe-Inferred |
---|
This is a low-level interface to the bag of tasks, which should only be used if it is not possible to use Control.Concurrent.Bag.Safe for your task. This module allows more control but it also requires a deeper knowledge about the implementation.
- data Bag r
- newBag_ :: MonadIO m => BufferType -> Maybe (SplitFunction r) -> m (Bag r)
- addEval :: MonadIO m => Bag r -> r -> m ()
- addTask :: MonadIO m => Bag r -> IO (Maybe r) -> m ()
- getResult :: MonadIO m => Bag r -> m (Maybe r)
- terminateBag :: MonadIO m => Bag r -> m ()
- noMoreTasks :: MonadIO m => Bag r -> m ()
- module Control.Concurrent.Bag.TaskBufferSTM
Documentation
newBag_ :: MonadIO m => BufferType -> Maybe (SplitFunction r) -> m (Bag r)Source
terminateBag :: MonadIO m => Bag r -> m ()Source
Terminates all threads running in the thread pool. terminateBag
is
non-blocking and therefore does not guarantee that all threads are
terminated after its executions. Additionally it is not guaranteed
that the treads are terminated promptly. It is implemented using
asynchronous exceptions and therefore it terminates a thread once it uses
a safe point. A safe point is where memory allocation occurs. Although
most tasks will have some point of memory allocation now and the, there
are loops that will never reach a safe point.
noMoreTasks :: MonadIO m => Bag r -> m ()Source
Tell the bag that there will be no more tasks from the outside, however, queued tasks may still add new tasks.