| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
UnliftIO.Concurrent
Description
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
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 would
be difficult to correct while continuing to support threadStatus.
Instances
| NFData ThreadId | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq | |
| Show ThreadId | @since base-4.2.0.0 |
| Eq ThreadId | @since base-4.2.0.0 |
| Ord ThreadId | @since base-4.2.0.0 |
Defined in GHC.Internal.Conc.Sync | |
| Hashable ThreadId | |
Defined in Data.Hashable.Class | |
Basic concurrency operations
myThreadId :: MonadIO m => m ThreadId #
Lifted version of myThreadId.
Since: 0.1.1.0
forkIO :: MonadUnliftIO m => m () -> m ThreadId #
Unlifted version of forkIO.
Since: 0.1.1.0
forkWithUnmask :: MonadUnliftIO m => ((forall a. m a -> m a) -> m ()) -> m ThreadId #
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 #
Unlifted version of forkIOWithUnmask.
Since: 0.2.11
forkFinally :: MonadUnliftIO m => m a -> (Either SomeException a -> m ()) -> m ThreadId #
Unlifted version of forkFinally.
Since: 0.1.1.0
killThread :: MonadIO m => ThreadId -> m () #
Lifted version of killThread.
Since: 0.1.1.0
throwTo :: (Exception e, MonadIO m) => ThreadId -> e -> m () #
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
forkOnWithUnmask :: MonadUnliftIO m => Int -> ((forall a. m a -> m a) -> m ()) -> m ThreadId #
Unlifted version of forkOnWithUnmask.
Since: 0.1.1.0
getNumCapabilities :: MonadIO m => m Int #
Lifted version of getNumCapabilities.
Since: 0.1.1.0
setNumCapabilities :: MonadIO m => Int -> m () #
Lifted version of setNumCapabilities.
Since: 0.1.1.0
threadCapability :: MonadIO m => ThreadId -> m (Int, Bool) #
Lifted version of threadCapability.
Since: 0.1.1.0
Scheduling
Waiting
threadDelay :: MonadIO m => Int -> m () #
Lifted version of threadDelay.
Since: 0.1.1.0
threadWaitRead :: MonadIO m => Fd -> m () #
Lifted version of threadWaitRead.
Since: 0.1.1.0
threadWaitWrite :: MonadIO m => Fd -> m () #
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.
forkOS :: MonadUnliftIO m => m () -> m ThreadId #
Unflifted version of forkOS.
Since: 0.1.1.0
isCurrentThreadBound :: MonadIO m => m Bool #
Lifted version of isCurrentThreadBound.
Since: 0.1.1.0
runInBoundThread :: MonadUnliftIO m => m a -> m a #
Unlifted version of runInBoundThread.
Since: 0.1.1.0
runInUnboundThread :: MonadUnliftIO m => m a -> m a #
Unlifted version of runInUnboundThread.
Since: 0.1.1.0
Weak references to ThreadIds
mkWeakThreadId :: MonadIO m => ThreadId -> m (Weak ThreadId) #
Lifted version of mkWeakThreadId.
Since: 0.1.1.0