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

Safe HaskellNone

Data.Atomics.Internal

Description

This module provides only the raw primops (and necessary types) for atomic operations.

Synopsis

Documentation

casArray# :: MutableArray# RealWorld a -> Int# -> Ticket a -> Ticket a -> State# RealWorld -> (#State# RealWorld, Int#, Ticket a#)Source

Unsafe, machine-level atomic compare and swap on an element within an Array.

casByteArrayInt# :: MutableByteArray# s -> Int# -> Int# -> Int# -> State# s -> (#State# s, Int##)Source

fetchAddByteArrayInt# :: MutableByteArray# s -> Int# -> Int# -> State# s -> (#State# s, Int##)Source

readForCAS# :: MutVar# RealWorld a -> State# RealWorld -> (#State# RealWorld, Ticket a#)Source

casMutVarTicketed# :: MutVar# RealWorld a -> Ticket a -> Ticket a -> State# RealWorld -> (#State# RealWorld, Int#, Ticket a#)Source

type Ticket a = Any aSource

When performing compare-and-swaps, the ticket encapsulates proof that a thread observed a specific previous value of a mutable variable. It is provided in lieu of the old value to compare-and-swap.

stg_storeLoadBarrier# :: State# RealWorld -> (#State# RealWorld, Int##)Source

stg_loadLoadBarrier# :: State# RealWorld -> (#State# RealWorld, Int##)Source

stg_writeBarrier# :: State# RealWorld -> (#State# RealWorld, Int##)Source