Portability | non-portable (concurrency) |
---|---|
Stability | experimental |
Maintainer | haskell@list.mightyreason.com |
Safe Haskell | Safe-Inferred |
Very simple quantity semaphore.
Documentation
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.
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.