Safe Haskell | None |
---|---|
Language | Haskell2010 |
Unlifted Control.Concurrent.
This module is not reexported by UnliftIO, use it only if UnliftIO.Async is not enough.
Since: 0.1.1.0
Synopsis
- data ThreadId
- myThreadId :: MonadIO m => m ThreadId
- forkIO :: MonadUnliftIO m => m () -> m ThreadId
- forkWithUnmask :: MonadUnliftIO m => ((forall a. m a -> m a) -> m ()) -> m ThreadId
- forkFinally :: MonadUnliftIO m => m a -> (Either SomeException a -> m ()) -> m ThreadId
- killThread :: MonadIO m => ThreadId -> m ()
- throwTo :: (Exception e, MonadIO m) => ThreadId -> e -> m ()
- forkOn :: MonadUnliftIO m => Int -> m () -> m ThreadId
- forkOnWithUnmask :: MonadUnliftIO m => Int -> ((forall a. m a -> m a) -> m ()) -> m ThreadId
- getNumCapabilities :: MonadIO m => m Int
- setNumCapabilities :: MonadIO m => Int -> m ()
- threadCapability :: MonadIO m => ThreadId -> m (Int, Bool)
- yield :: MonadIO m => m ()
- threadDelay :: MonadIO m => Int -> m ()
- threadWaitRead :: MonadIO m => Fd -> m ()
- threadWaitWrite :: MonadIO m => Fd -> m ()
- module UnliftIO.MVar
- module UnliftIO.Chan
- rtsSupportsBoundThreads :: Bool
- forkOS :: MonadUnliftIO m => m () -> m ThreadId
- isCurrentThreadBound :: MonadIO m => m Bool
- runInBoundThread :: MonadUnliftIO m => m a -> m a
- runInUnboundThread :: MonadUnliftIO m => m a -> m a
- mkWeakThreadId :: MonadIO 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
ThreadId
s. 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.
Instances
Eq ThreadId | Since: base-4.2.0.0 |
Ord ThreadId | Since: base-4.2.0.0 |
Defined in GHC.Conc.Sync | |
Show ThreadId | Since: base-4.2.0.0 |
NFData ThreadId | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq |
Basic concurrency operations
myThreadId :: MonadIO m => m ThreadId Source #
Lifted version of myThreadId
.
Since: 0.1.1.0
forkWithUnmask :: MonadUnliftIO m => ((forall a. m a -> m a) -> m ()) -> m ThreadId Source #
Unlifted version of forkIOWithUnmask
.
Since: 0.1.1.0
forkFinally :: MonadUnliftIO m => m a -> (Either SomeException a -> m ()) -> m ThreadId Source #
Unlifted version of forkFinally
.
Since: 0.1.1.0
killThread :: MonadIO m => ThreadId -> m () Source #
Lifted version of killThread
.
Since: 0.1.1.0
throwTo :: (Exception e, MonadIO m) => ThreadId -> e -> m () Source #
Throw an asynchronous exception to another thread.
Synchronously typed exceptions will be wrapped into an
AsyncExceptionWrapper
, see
https://github.com/fpco/safe-exceptions#determining-sync-vs-async.
It's usually a better idea to use the UnliftIO.Async module, see https://github.com/fpco/safe-exceptions#quickstart.
Since: 0.1.0.0
Threads with affinity
forkOn :: MonadUnliftIO m => Int -> m () -> m ThreadId Source #
Unlifted version of forkOn
.
Since: 0.1.1.0
forkOnWithUnmask :: MonadUnliftIO m => Int -> ((forall a. m a -> m a) -> m ()) -> m ThreadId Source #
Unlifted version of forkOnWithUnmask
.
Since: 0.1.1.0
getNumCapabilities :: MonadIO m => m Int Source #
Lifted version of getNumCapabilities
.
Since: 0.1.1.0
setNumCapabilities :: MonadIO m => Int -> m () Source #
Lifted version of setNumCapabilities
.
Since: 0.1.1.0
threadCapability :: MonadIO m => ThreadId -> m (Int, Bool) Source #
Lifted version of threadCapability
.
Since: 0.1.1.0
Scheduling
Waiting
threadDelay :: MonadIO m => Int -> m () Source #
Lifted version of threadDelay
.
Since: 0.1.1.0
threadWaitRead :: MonadIO m => Fd -> m () Source #
Lifted version of threadWaitRead
.
Since: 0.1.1.0
threadWaitWrite :: MonadIO m => Fd -> m () Source #
Lifted version of threadWaitWrite
.
Since: 0.1.1.0
Communication abstractions
module UnliftIO.MVar
module UnliftIO.Chan
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 :: MonadIO m => m Bool Source #
Lifted version of isCurrentThreadBound
.
Since: 0.1.1.0
runInBoundThread :: MonadUnliftIO m => m a -> m a Source #
Unlifted version of runInBoundThread
.
Since: 0.1.1.0
runInUnboundThread :: MonadUnliftIO m => m a -> m a Source #
Unlifted version of runInUnboundThread
.
Since: 0.1.1.0
Weak references to ThreadIds
mkWeakThreadId :: MonadIO m => ThreadId -> m (Weak ThreadId) Source #
Lifted version of mkWeakThreadId
.
Since: 0.1.1.0