| License | BSD3 |
|---|---|
| Maintainer | Julian Sutherland (julian.sutherland10@imperial.ac.uk) |
| Safe Haskell | None |
| Language | Haskell98 |
Data.NonBlocking.LockFree.SpinCounter
Description
An implementation of a lock-free spin counter. Works with any monad that has atomically modificable references.
- data SpinCounter r
- type SpinCounterIO = SpinCounter IORef
- type SpinCounterSTM = SpinCounter TVar
- newSpinCounter :: (MonadAtomicRef r m, Integral a) => a -> m (SpinCounter r)
- incSpinCounter :: MonadAtomicRef r m => SpinCounter r -> m ()
- readSpinCounter :: (MonadAtomicRef r m, Num a) => SpinCounter r -> m a
Documentation
data SpinCounter r Source
A lock-free concurrent Spin counter usable in any monad, m, that is paired with a reference type, r, by an instance of MonadAtomicRef. Can use Specializations SpinCounterIO and SpinCounterSTM
type SpinCounterIO = SpinCounter IORef Source
SpinCounter inside the IO Monad.
type SpinCounterSTM = SpinCounter TVar Source
SpinCounter inside the STM Monad.
newSpinCounter :: (MonadAtomicRef r m, Integral a) => a -> m (SpinCounter r) Source
Creates a new instance of the SpinCounter data type initialized to value of the input to the function, an instance of the class Integral.
incSpinCounter :: MonadAtomicRef r m => SpinCounter r -> m () Source
Increments an instance of the SpinCounter data type by one in a lock-free manner.
readSpinCounter :: (MonadAtomicRef r m, Num a) => SpinCounter r -> m a Source
Reads the value of an instance of the SpinCounter data type in a lock-free manner.