atomic-primops-0.4: A safe approach to CAS and other atomic ops in Haskell.

Safe HaskellNone

Data.Atomics.Counter.Reference

Description

This reference version is implemented with atomicModifyIORef and can be a useful fallback if one of the other implementations needs to be debugged for a given architecture.

Synopsis

Documentation

type CTicket = IntSource

newCounter :: Int -> IO AtomicCounterSource

Create a new counter initialized to the given value.

readCounterForCAS :: AtomicCounter -> IO CTicketSource

Just like the Data.Atomics CAS interface, this routine returns an opaque ticket that can be used in CAS operations.

readCounter :: AtomicCounter -> IO IntSource

Equivalent to readCounterForCAS followed by peekCTicket.

peekCTicket :: CTicket -> IntSource

Opaque tickets cannot be constructed, but they can be destructed into values.

writeCounter :: AtomicCounter -> Int -> IO ()Source

Make a non-atomic write to the counter. No memory-barrier.

casCounter :: AtomicCounter -> CTicket -> Int -> IO (Bool, CTicket)Source

Compare and swap for the counter ADT.

incrCounter :: Int -> AtomicCounter -> IO IntSource

Try repeatedly until we successfully increment the counter by a given amount. Returns the original value of the counter (pre-increment).