Control.Concurrent.STM.TVar

stm-2.5.0.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.TVar

Contents

- TVars

Description

Synopsis

- data TVar a
- newTVar :: a -> STM (TVar a)
- newTVarIO :: a -> IO (TVar a)
- readTVar :: TVar a -> STM a
- readTVarIO :: TVar a -> IO a
- writeTVar :: TVar a -> a -> STM ()
- modifyTVar :: TVar a -> (a -> a) -> STM ()
- modifyTVar' :: TVar a -> (a -> a) -> STM ()
- stateTVar :: TVar s -> (s -> (a, s)) -> STM a
- swapTVar :: TVar a -> a -> STM a
- registerDelay :: Int -> IO (TVar Bool)
- mkWeakTVar :: TVar a -> IO () -> IO (Weak (TVar a))

# TVars

data TVar a Source #

Shared memory locations that support atomic memory transactions.

#### Instances

Instances details

Eq (TVar a) | Since: base-4.8.0.0
Instance details Defined in GHC.Conc.Sync Methods (==) :: TVar a -> TVar a -> Bool # (/=) :: TVar a -> TVar a -> Bool #

newTVar :: a -> STM (TVar a) Source #

Create a new `TVar` holding a value supplied

newTVarIO :: a -> IO (TVar a) Source #

`IO` version of `newTVar`. This is useful for creating top-level `TVar`s using `unsafePerformIO`, because using `atomically` inside `unsafePerformIO` isn't possible.

readTVar :: TVar a -> STM a Source #

Return the current value stored in a `TVar`.

readTVarIO :: TVar a -> IO a Source #

Return the current value stored in a `TVar`. This is equivalent to

     readTVarIO = atomically . readTVar

but works much faster, because it doesn't perform a complete transaction, it just reads the current value of the `TVar`.

writeTVar :: TVar a -> a -> STM () Source #

Write the supplied value into a `TVar`.

modifyTVar :: TVar a -> (a -> a) -> STM () Source #

Mutate the contents of a `TVar`. N.B., this version is non-strict.

Since: stm-2.3

modifyTVar' :: TVar a -> (a -> a) -> STM () Source #

Strict version of `modifyTVar`.

Since: stm-2.3

stateTVar :: TVar s -> (s -> (a, s)) -> STM a Source #

Like `modifyTVar'` but the function is a simple state transition that can return a side value which is passed on as the result of the `STM`.

Since: stm-2.5.0

swapTVar :: TVar a -> a -> STM a Source #

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

Since: stm-2.3

registerDelay :: Int -> IO (TVar Bool) Source #

Switch the value of returned `TVar` from initial value `False` to `True` after a given number of microseconds. The caveats associated with `threadDelay` also apply.

mkWeakTVar :: TVar a -> IO () -> IO (Weak (TVar a)) Source #

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

Since: stm-2.4.3