Copyright | (c) Chris Kuklewicz 2012 |
---|---|
License | BSD-style |
Maintainer | haskell@list.mightyreason.com |
Stability | experimental |
Portability | non-portable (concurrency) |
Safe Haskell | Safe |
Language | Haskell98 |
Control.Concurrent.STM.SSem
Description
Very simple quantity semaphore.
Documentation
new :: Int -> STM SSem Source #
Create a new semaphore with the given argument as the initially available quantity. This allows new semaphores to start with a negative, zero, or positive quantity.
wait :: SSem -> STM () Source #
Try to take a unit of value from the semaphore. This succeeds when the current quantity is
positive, and then reduces the quantity by one. Otherwise this will retry
. This will never
result in a negative quantity. If several threads are retying then which one succeeds next is
undefined -- an unlucky thread might starve.
signal :: SSem -> STM () Source #
Signal that single unit of the semaphore is available. This increases the available quantity by one.
tryWait :: SSem -> STM (Maybe Int) Source #
Non-retrying version of wait
. `tryWait s` is defined as `tryN s 1`
waitN :: SSem -> Int -> STM () Source #
Try to take the given value from the semaphore. This succeeds when the quantity is greater or
equal to the given value, and then subtracts the given value from the quantity. Otherwise this
will retry
. This will never result in a negative quantity. If several threads are retrying
then which one succeeds next is undefined -- an unlucky thread might starve.
signalN :: SSem -> Int -> STM () Source #
Signal that many units of the semaphore are available. This changes the available quantity by adding the passed size.