| Copyright | (c) The University of Glasgow 2012 | 
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) | 
| Maintainer | libraries@haskell.org | 
| Stability | experimental | 
| Portability | non-portable (requires STM) | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Control.Concurrent.STM.TSem
Description
TSem: transactional semaphores.
Since: stm-2.4.2
Documentation
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.
Since: stm-2.4.2
newTSem :: Integer -> STM TSem #
Construct new TSem with an initial counter value.
A positive initial counter value denotes availability of
 units waitTSem can acquire.
The initial counter value can be negative which denotes a resource
 "debt" that requires a respective amount of signalTSem
 operations to counter-balance.
Since: stm-2.4.2
signalTSem :: TSem -> STM () #
Signal a TSem (aka V operation).
This operation adds/releases a unit back to the semaphore (i.e. increments the internal counter).
Since: stm-2.4.2