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

Safe HaskellNone



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.



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.

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. Similar behavior to casIORef.

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).