Treiber-0.0.1: Lock free Treiber stack

Safe HaskellNone
LanguageHaskell98

Data.NonBlocking.LockFree.Treiber

Synopsis

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.

newTreiberStack :: (MonadAtomicRef r m, Eq a, Show a) => 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.

pushTreiberStack :: (MonadAtomicRef r m, Eq a, Show a) => TreiberStack r a -> a -> m () Source

Pushes an element on to a Treiber stack.

popTreiberStack :: (MonadAtomicRef r m, Eq a, Show a) => TreiberStack r a -> m (Maybe a) Source

Pops an element of a Treiber stack. Returns Nothing if the stack is empty.