| base-3.0.2.0: Basic libraries | Source code | Contents | Index
Control.Concurrent.SampleVar |
Portability | non-portable (concurrency)
Stability | experimental
Maintainer | libraries@haskell.org
Contents
Sample Variables
Description
Sample variables
Synopsis
type SampleVar a = MVar (Int, MVar a)
newEmptySampleVar :: IO (SampleVar a)
newSampleVar :: a -> IO (SampleVar a)
emptySampleVar :: SampleVar a -> IO ()
readSampleVar :: SampleVar a -> IO a
writeSampleVar :: SampleVar a -> a -> IO ()
isEmptySampleVar :: SampleVar a -> IO Bool
Sample Variables
type SampleVar a = MVar (Int, MVar a) | Source
Sample variables are slightly different from a normal `MVar`: Reading an empty `SampleVar` causes the reader to block. (same as `takeMVar` on empty `MVar`) Reading a filled `SampleVar` empties it and returns value. (same as `takeMVar`) Writing to an empty `SampleVar` fills it with a value, and potentially, wakes up a blocked reader (same as for `putMVar` on empty `MVar`). Writing to a filled `SampleVar` overwrites the current value. (different from `putMVar` on full `MVar`.)
newEmptySampleVar :: IO (SampleVar a) | Source
Build a new, empty, `SampleVar`
newSampleVar :: a -> IO (SampleVar a) | Source
Build a `SampleVar` with an initial value.
emptySampleVar :: SampleVar a -> IO () | Source
If the SampleVar is full, leave it empty. Otherwise, do nothing.
readSampleVar :: SampleVar a -> IO a | Source
Wait for a value to become available, then take it and return.
writeSampleVar :: SampleVar a -> a -> IO () | Source
Write a value into the `SampleVar`, overwriting any previous value that was there.
isEmptySampleVar :: SampleVar a -> IO Bool | Source
Returns `True` if the `SampleVar` is currently empty. Note that this function is only useful if you know that no other threads can be modifying the state of the `SampleVar`, because otherwise the state of the `SampleVar` may have changed by the time you see the result of `isEmptySampleVar`.
Produced by Haddock version 0.9