| Copyright | Bas van Dijk |
|---|---|
| License | BSD-style |
| Maintainer | Bas van Dijk <v.dijk.bas@gmail.com> |
| Stability | experimental |
| Safe Haskell | Safe |
| Language | Haskell98 |
Control.Concurrent.Lifted
Contents
Description
This is a wrapped version of Control.Concurrent with types generalized
from IO to all monads in either MonadBase or MonadBaseControl.
- data ThreadId :: *
- myThreadId :: MonadBase IO m => m ThreadId
- fork :: MonadBaseControl IO m => m () -> m ThreadId
- forkWithUnmask :: MonadBaseControl IO m => ((forall a. m a -> m a) -> m ()) -> m ThreadId
- forkFinally :: MonadBaseControl IO m => m a -> (Either SomeException a -> m ()) -> m ThreadId
- killThread :: MonadBase IO m => ThreadId -> m ()
- throwTo :: (MonadBase IO m, Exception e) => ThreadId -> e -> m ()
- forkOn :: MonadBaseControl IO m => Int -> m () -> m ThreadId
- forkOnWithUnmask :: MonadBaseControl IO m => Int -> ((forall a. m a -> m a) -> m ()) -> m ThreadId
- getNumCapabilities :: MonadBase IO m => m Int
- setNumCapabilities :: MonadBase IO m => Int -> m ()
- threadCapability :: MonadBase IO m => ThreadId -> m (Int, Bool)
- yield :: MonadBase IO m => m ()
- threadDelay :: MonadBase IO m => Int -> m ()
- threadWaitRead :: MonadBase IO m => Fd -> m ()
- threadWaitWrite :: MonadBase IO m => Fd -> m ()
- module Control.Concurrent.MVar.Lifted
- module Control.Concurrent.Chan.Lifted
- module Control.Concurrent.QSem.Lifted
- module Control.Concurrent.QSemN.Lifted
- rtsSupportsBoundThreads :: Bool
- forkOS :: MonadBaseControl IO m => m () -> m ThreadId
- isCurrentThreadBound :: MonadBase IO m => m Bool
- runInBoundThread :: MonadBaseControl IO m => m a -> m a
- runInUnboundThread :: MonadBaseControl IO m => m a -> m a
- mkWeakThreadId :: MonadBase IO m => ThreadId -> m (Weak ThreadId)
Concurrent Haskell
A ThreadId is an abstract type representing a handle to a thread.
ThreadId is an instance of Eq, Ord and Show, where
the Ord instance implements an arbitrary total ordering over
ThreadIds. The Show instance lets you convert an arbitrary-valued
ThreadId to string form; showing a ThreadId value is occasionally
useful when debugging or diagnosing the behaviour of a concurrent
program.
Note: in GHC, if you have a ThreadId, you essentially have
a pointer to the thread itself. This means the thread itself can't be
garbage collected until you drop the ThreadId.
This misfeature will hopefully be corrected at a later date.
Basic concurrency operations
myThreadId :: MonadBase IO m => m ThreadId Source #
Generalized version of myThreadId.
forkWithUnmask :: MonadBaseControl IO m => ((forall a. m a -> m a) -> m ()) -> m ThreadId Source #
Generalized version of forkIOWithUnmask.
Note that, while the forked computation m () has access to the captured
state, all its side-effects in m are discarded. It is run only for its
side-effects in IO.
forkFinally :: MonadBaseControl IO m => m a -> (Either SomeException a -> m ()) -> m ThreadId Source #
Generalized version of forkFinally.
Note that in forkFinally action and_then, while the forked
action and the and_then function have access to the captured
state, all their side-effects in m are discarded. They're run
only for their side-effects in IO.
killThread :: MonadBase IO m => ThreadId -> m () Source #
Generalized version of killThread.
throwTo :: (MonadBase IO m, Exception e) => ThreadId -> e -> m () Source #
Generalized version of throwTo.
Threads with affinity
forkOnWithUnmask :: MonadBaseControl IO m => Int -> ((forall a. m a -> m a) -> m ()) -> m ThreadId Source #
Generalized version of forkOnWithUnmask.
Note that, while the forked computation m () has access to the captured
state, all its side-effects in m are discarded. It is run only for its
side-effects in IO.
getNumCapabilities :: MonadBase IO m => m Int Source #
Generalized version of getNumCapabilities.
setNumCapabilities :: MonadBase IO m => Int -> m () Source #
Generalized version of setNumCapabilities.
threadCapability :: MonadBase IO m => ThreadId -> m (Int, Bool) Source #
Generalized version of threadCapability.
Scheduling
Blocking
Waiting
threadDelay :: MonadBase IO m => Int -> m () Source #
Generalized version of threadDelay.
threadWaitRead :: MonadBase IO m => Fd -> m () Source #
Generalized version of threadWaitRead.
threadWaitWrite :: MonadBase IO m => Fd -> m () Source #
Generalized version of threadWaitWrite.
Communication abstractions
Bound Threads
rtsSupportsBoundThreads :: Bool #
True if bound threads are supported.
If rtsSupportsBoundThreads is False, isCurrentThreadBound
will always return False and both forkOS and runInBoundThread will
fail.
isCurrentThreadBound :: MonadBase IO m => m Bool Source #
Generalized version of isCurrentThreadBound.
runInBoundThread :: MonadBaseControl IO m => m a -> m a Source #
Generalized version of runInBoundThread.
runInUnboundThread :: MonadBaseControl IO m => m a -> m a Source #
Generalized version of runInUnboundThread.
Weak references to ThreadIds
mkWeakThreadId :: MonadBase IO m => ThreadId -> m (Weak ThreadId) Source #
Generalized versio of mkWeakThreadId.