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
- forkIOWithUnmask :: 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 |
|
Hashable ThreadId | |
Basic concurrency operations
myThreadId :: MonadIO m => m ThreadId Source #
Lifted version of
myThreadId
.
Since: 0.1.1.0
forkIO :: MonadUnliftIO m => m () -> m ThreadId Source #
Unlifted version of
forkIO
.
Since: 0.1.1.0
forkWithUnmask :: MonadUnliftIO m => (( forall a. m a -> m a) -> m ()) -> m ThreadId Source #
Deprecated: forkWithUnmask has been renamed to forkIOWithUnmask
Please use
forkIOWithUnmask
instead. This function has been deprecated
in release 0.2.11 and will be removed in the next major release.
Since: 0.1.1.0
forkIOWithUnmask :: MonadUnliftIO m => (( forall a. m a -> m a) -> m ()) -> m ThreadId Source #
Unlifted version of
forkIOWithUnmask
.
Since: 0.2.11
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 Source #
True
if bound threads are supported.
If
rtsSupportsBoundThreads
is
False
,
isCurrentThreadBound
will always return
False
and both
forkOS
and
runInBoundThread
will
fail.
forkOS :: MonadUnliftIO m => m () -> m ThreadId Source #
Unflifted version of
forkOS
.
Since: 0.1.1.0
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