Control.Concurrent.STM.TMVar

stm-2.4.4.1: Software Transactional Memory

Copyright | (c) The University of Glasgow 2004
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | non-portable (requires STM)
Safe Haskell | Trustworthy
Language | Haskell2010

Control.Concurrent.STM.TMVar

Contents

- TMVars

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
- tryReadTMVar :: TMVar a -> STM (Maybe a)
- swapTMVar :: TMVar a -> a -> STM a
- tryTakeTMVar :: TMVar a -> STM (Maybe a)
- tryPutTMVar :: TMVar a -> a -> STM Bool
- isEmptyTMVar :: TMVar a -> STM Bool
- mkWeakTMVar :: TMVar a -> IO () -> IO (Weak (TMVar a))

# TMVars

data TMVar a #

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.

Instances

Eq (TMVar a) # |
Methods (==) :: TMVar a -> TMVar a -> Bool # (/=) :: TMVar a -> TMVar a -> Bool #

newTMVar :: a -> STM (TMVar a) #

Create a `TMVar` which contains the supplied value.

newEmptyTMVar :: STM (TMVar a) #

Create a `TMVar` which is initially empty.

newTMVarIO :: a -> IO (TMVar a) #

`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) #

`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 #

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 () #

Put a value into a `TMVar`. If the `TMVar` is currently full, `putTMVar` will `retry`.

readTMVar :: TMVar a -> STM a #

This is a combination of `takeTMVar` and `putTMVar`; ie. it takes the value from the `TMVar`, puts it back, and also returns it.

tryReadTMVar :: TMVar a -> STM (Maybe a) #

A version of `readTMVar` which does not retry. Instead it returns `Nothing` if no value is available.

swapTMVar :: TMVar a -> a -> STM a #

Swap the contents of a `TMVar` for a new value.

tryTakeTMVar :: TMVar a -> STM (Maybe a) #

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 #

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 #

Check whether a given `TMVar` is empty.

mkWeakTMVar :: TMVar a -> IO () -> IO (Weak (TMVar a)) #

Make a `Weak` pointer to a `TMVar`, using the second argument as a finalizer to run when the `TMVar` is garbage-collected.

Since: 2.4.4