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 |
TSem
: transactional semaphores.
Since: 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: 2.4.2
newTSem :: Integer -> STM TSem Source #
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: 2.4.2