Safe Haskell | None |
---|
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.
- data AtomicCounter
- type CTicket = Int
- newCounter :: Int -> IO AtomicCounter
- readCounterForCAS :: AtomicCounter -> IO CTicket
- readCounter :: AtomicCounter -> IO Int
- peekCTicket :: CTicket -> Int
- writeCounter :: AtomicCounter -> Int -> IO ()
- casCounter :: AtomicCounter -> CTicket -> Int -> IO (Bool, CTicket)
- incrCounter :: Int -> AtomicCounter -> IO Int
- incrCounter_ :: Int -> AtomicCounter -> IO ()
Documentation
data AtomicCounter Source
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).
incrCounter_ :: Int -> AtomicCounter -> IO ()Source