Portability | non-portable (concurrency) |
---|---|
Stability | experimental |
Maintainer | libraries@haskell.org |
Safe Haskell | Trustworthy |
Deprecated: Control.Concurrent.SampleVar will be removed in GHC 7.8. Please use an alternative, e.g. the SafeSemaphore package, instead.
Sample variables
- data SampleVar 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
data SampleVar a
Sample variables are slightly different from a normal MVar
:
- Reading an empty
SampleVar
causes the reader to block. (same astakeMVar
on emptyMVar
) - Reading a filled
SampleVar
empties it and returns value. (same astakeMVar
) - Writing to an empty
SampleVar
fills it with a value, and potentially, wakes up a blocked reader (same as forputMVar
on emptyMVar
). - Writing to a filled
SampleVar
overwrites the current value. (different fromputMVar
on fullMVar
.)
newEmptySampleVar :: IO (SampleVar a)
Build a new, empty, SampleVar
newSampleVar :: a -> IO (SampleVar a)
Build a SampleVar
with an initial value.
emptySampleVar :: SampleVar a -> IO ()
If the SampleVar is full, leave it empty. Otherwise, do nothing.
readSampleVar :: SampleVar a -> IO a
Wait for a value to become available, then take it and return.
writeSampleVar :: SampleVar a -> a -> IO ()
Write a value into the SampleVar
, overwriting any previous value that
was there.
isEmptySampleVar :: SampleVar a -> IO Bool
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
.