stm-2.4.2: Software Transactional Memory

Portability | non-portable (requires STM)
Stability | experimental
Maintainer | libraries@haskell.org
Safe Haskell | Safe-Inferred

Control.Concurrent.STM.TSem

Description

`TSem`: transactional semaphores.

Synopsis

- data TSem
- newTSem :: Int -> STM TSem
- waitTSem :: TSem -> STM ()
- signalTSem :: TSem -> STM ()

# Documentation

data TSem Source

`TSem` is a transactional semaphore. It holds a certain number of units, and units may be acquired or released by `waitTSem` and `signalTSem` respectively. When the `TSem` is empty, `waitTSem` blocks.

Note that `TSem` has no concept of fairness, and there is no guarantee that threads blocked in `waitTSem` will be unblocked in the same order; in fact they will all be unblocked at the same time and will fight over the `TSem`. Hence `TSem` is not suitable if you expect there to be a high number of threads contending for the resource. However, like other STM abstractions, `TSem` is composable.

Instances

Eq TSem |
Typeable TSem |

newTSem :: Int -> STM TSem Source

waitTSem :: TSem -> STM ()Source

signalTSem :: TSem -> STM ()Source