Portability | non-portable (concurrency) |
---|---|
Stability | experimental |
Maintainer | haskell@list.mightyreason.com |
Safe Haskell | Safe-Inferred |
Very simple quantity semaphore.
- data SSem
- new :: Int -> IO SSem
- withSem :: SSem -> IO a -> IO a
- wait :: SSem -> IO ()
- signal :: SSem -> IO ()
- tryWait :: SSem -> IO (Maybe Int)
- withSemN :: SSem -> Int -> IO a -> IO a
- waitN :: SSem -> Int -> IO ()
- signalN :: SSem -> Int -> IO ()
- tryWaitN :: SSem -> Int -> IO (Maybe Int)
- getValue :: SSem -> IO Int
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 block and retry
until it
succeeds or is killed. 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 that single unit of the semaphore is available. This increases the available quantity by one.
tryWait :: SSem -> IO (Maybe Int)Source
Non-waiting version of wait. `tryWait s` is defined as `tryWaitN s 1`
waitN :: SSem -> Int -> IO ()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 block and retry
until it succeeds or is killed. 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 -> IO ()Source
Signal that many units of the semaphore are available. This changes the available quantity by adding the passed size.