| Copyright | (c) Peter Robinson 2009 (c) The University of Glasgow 2004 |
|---|---|
| License | BSD3 |
| Maintainer | Peter Robinson <robinson@ecs.tuwien.ac.at> |
| Stability | experimental |
| Portability | non-portable (requires STM) |
| Safe Haskell | None |
| Language | Haskell2010 |
Control.Concurrent.AdvSTM.TMVar
Contents
Description
TMVar: Transactional MVars, for use in the AdvAdvSTM monad
Corresponds to Control.Concurrent.STM.TMVar
Synopsis
- data TMVar a
- newTMVar :: MonadAdvSTM m => a -> m (TMVar a)
- newEmptyTMVar :: MonadAdvSTM m => m (TMVar a)
- newTMVarIO :: a -> IO (TMVar a)
- newEmptyTMVarIO :: IO (TMVar a)
- takeTMVar :: MonadAdvSTM m => TMVar a -> m a
- putTMVar :: MonadAdvSTM m => TMVar a -> a -> m ()
- readTMVar :: MonadAdvSTM m => TMVar a -> m a
- swapTMVar :: MonadAdvSTM m => TMVar a -> a -> m a
- tryTakeTMVar :: MonadAdvSTM m => TMVar a -> m (Maybe a)
- tryPutTMVar :: MonadAdvSTM m => TMVar a -> a -> m Bool
- isEmptyTMVar :: MonadAdvSTM m => TMVar a -> m Bool
TVars
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 :: MonadAdvSTM m => a -> m (TMVar a) Source #
Create a TMVar which contains the supplied value.
newEmptyTMVar :: MonadAdvSTM m => m (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
TMVars 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
TMVars using unsafePerformIO, because using
atomically inside unsafePerformIO isn't
possible.
takeTMVar :: MonadAdvSTM m => TMVar a -> m a Source #
putTMVar :: MonadAdvSTM m => TMVar a -> a -> m () Source #
readTMVar :: MonadAdvSTM m => TMVar a -> m a Source #
swapTMVar :: MonadAdvSTM m => TMVar a -> a -> m a Source #
Swap the contents of a TMVar for a new value.
tryTakeTMVar :: MonadAdvSTM m => TMVar a -> m (Maybe a) Source #
A version of takeTMVar that does not retry. The tryTakeTMVar
function returns Nothing if the TMVar was empty, or if
the Just aTMVar was full with contents a. After tryTakeTMVar, the
TMVar is left empty.
tryPutTMVar :: MonadAdvSTM m => TMVar a -> a -> m Bool Source #
isEmptyTMVar :: MonadAdvSTM m => TMVar a -> m 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.