Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
newCounter :: Int -> IO AtomicCounter
Create a new counter initialized to the given value.
readCounterForCAS :: AtomicCounter -> IO CTicket
Just like the Data.Atomics CAS interface, this routine returns an opaque ticket that can be used in CAS operations.
readCounter :: AtomicCounter -> IO Int
Equivalent to readCounterForCAS
followed by peekCTicket
.
peekCTicket :: CTicket -> Int
Opaque tickets cannot be constructed, but they can be destructed into values.
writeCounter :: AtomicCounter -> Int -> IO ()
Make a non-atomic write to the counter. No memory-barrier.
casCounter :: AtomicCounter -> CTicket -> Int -> IO (Bool, CTicket)
Compare and swap for the counter ADT. Similar behavior to casIORef
.
incrCounter :: Int -> AtomicCounter -> IO Int
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 ()