| stm-2.1.1.1: Software Transactional Memory | Source code | Contents | Index
Control.Concurrent.STM.TMVar |
Portability | non-portable (requires STM)
Stability | experimental
Maintainer | libraries@haskell.org
Contents
TVars
Description
TMVar: Transactional MVars, for use in the STM monad (GHC only)
Synopsis
data TMVar a
newTMVar :: a -> STM (TMVar a)
newEmptyTMVar :: STM (TMVar a)
newTMVarIO :: a -> IO (TMVar a)
newEmptyTMVarIO :: IO (TMVar a)
takeTMVar :: TMVar a -> STM a
putTMVar :: TMVar a -> a -> STM ()
readTMVar :: TMVar a -> STM a
swapTMVar :: TMVar a -> a -> STM a
tryTakeTMVar :: TMVar a -> STM (Maybe a)
tryPutTMVar :: TMVar a -> a -> STM Bool
isEmptyTMVar :: TMVar a -> STM Bool
TVars
data TMVar a | Source
A `TMVar` is a synchronising variable, used for communication between concurrent threads. It can be thought of as a box, which may be empty or full.
newTMVar :: a -> STM (TMVar a) | Source
Create a `TMVar` which contains the supplied value.
newEmptyTMVar :: STM (TMVar a) | Source
Create a `TMVar` which is initially empty.
newTMVarIO :: a -> IO (TMVar a) | Source
`IO` version of `newTMVar`. This is useful for creating top-level `TMVar`s using `unsafePerformIO`, because using `atomically` inside `unsafePerformIO` isn't possible.
newEmptyTMVarIO :: IO (TMVar a) | Source
`IO` version of `newEmptyTMVar`. This is useful for creating top-level `TMVar`s using `unsafePerformIO`, because using `atomically` inside `unsafePerformIO` isn't possible.
takeTMVar :: TMVar a -> STM a | Source
Return the contents of the `TMVar`. If the `TMVar` is currently empty, the transaction will `retry`. After a `takeTMVar`, the `TMVar` is left empty.
putTMVar :: TMVar a -> a -> STM () | Source
Put a value into a `TMVar`. If the `TMVar` is currently full, `putTMVar` will `retry`.
readTMVar :: TMVar a -> STM a | Source
This is a combination of `takeTMVar` and `putTMVar`; ie. it takes the value from the `TMVar`, puts it back, and also returns it.
swapTMVar :: TMVar a -> a -> STM a | Source
Swap the contents of a `TMVar` for a new value.
tryTakeTMVar :: TMVar a -> STM (Maybe a) | Source
A version of `takeTMVar` that does not `retry`. The `tryTakeTMVar` function returns `Nothing` if the `TMVar` was empty, or ``Just` a` if the `TMVar` was full with contents `a`. After `tryTakeTMVar`, the `TMVar` is left empty.
tryPutTMVar :: TMVar a -> a -> STM Bool | Source
A version of `putTMVar` that does not `retry`. The `tryPutTMVar` function attempts to put the value `a` into the `TMVar`, returning `True` if it was successful, or `False` otherwise.
isEmptyTMVar :: TMVar a -> STM Bool | Source
Check whether a given `TMVar` is empty. Notice that the boolean value returned is just a snapshot of the state of the `TMVar`. By the time you get to react on its result, the `TMVar` may have been filled (or emptied) - so be extremely careful when using this operation. Use `tryTakeTMVar` instead if possible.
Produced by Haddock version 0.9