| License | BSD3 |
|---|---|
| Maintainer | Julian Sutherland (julian.sutherland10@imperial.ac.uk) |
| Safe Haskell | None |
| Language | Haskell98 |
Data.NonBlocking.LockFree.Treiber
Description
An implementation of Treiber stacks, a lock free stack. Works with any monad that has atomically modificable references.
- data TreiberStack r a
- type TreiberStackIO a = TreiberStack IORef a
- type TreiberStackSTM a = TreiberStack TVar a
- newTreiberStack :: MonadAtomicRef r m => m (TreiberStack r a)
- pushTreiberStack :: MonadAtomicRef r m => TreiberStack r a -> a -> m ()
- popTreiberStack :: MonadAtomicRef r m => TreiberStack r a -> m (Maybe a)
Documentation
data TreiberStack r a Source
A lock-free concurrent Treiber stack usable in any Monad, m, that is paired with a reference type, r, by an instance of MonadAtomicRef. Can use Specializations TreiberStackIO and TreiberStackSTM.
type TreiberStackIO a = TreiberStack IORef a Source
type TreiberStackSTM a = TreiberStack TVar a Source
newTreiberStack :: MonadAtomicRef r m => m (TreiberStack r a) Source
Creates a new empty instance of the TreiberStack. Internally implemented with a reference of type r, which is why they must be atomically modifiable. Initially empty.
pushTreiberStack :: MonadAtomicRef r m => TreiberStack r a -> a -> m () Source
Pushes an element on to a TreiberStack in a lock-free manner.
popTreiberStack :: MonadAtomicRef r m => TreiberStack r a -> m (Maybe a) Source
Pops an element of a TreiberStack in a lock-free manner. Returns Nothing if the stack is empty.