stdio-0.2.0.0: A simple and high performance IO toolkit for Haskell

Std.Data.PrimIORef

Description

This package provide fast unboxed references for IO monad and atomic operations for Counter type. Unboxed reference is implemented using single cell MutableByteArray s to eliminate indirection overhead which MutVar# s a carry, on the otherhand unboxed reference only support limited type(instances of Prim class).

Atomic operations on Counter type are implemented using fetch-and-add primitives, which is much faster than a CAS loop(atomicModifyIORef). Beside basic atomic counter usage, you can also leverage idempotence of and 0, or (-1) to make a concurrent flag.

Synopsis

Unboxed IO references

data PrimIORef a Source #

A mutable variable in the IO monad which can hold an instance of Prim.

newPrimIORef :: Prim a => a -> IO (PrimIORef a) Source #

Build a new PrimIORef

readPrimIORef :: Prim a => PrimIORef a -> IO a Source #

Read the value of an PrimIORef

writePrimIORef :: Prim a => PrimIORef a -> a -> IO () Source #

Write a new value into an PrimIORef

modifyPrimIORef :: Prim a => PrimIORef a -> (a -> a) -> IO () Source #

Mutate the contents of an IORef.

Unboxed reference is always strict on the value it hold.

Atomic operations for PrimIORef Int

Alias for 'PrimIORef Int' which support several atomic operations.

Build a new Counter

return value BEFORE atomic operation

Atomically add a Counter, return the value BEFORE added.

Atomically sub a Counter, return the value BEFORE subbed.

Atomically and a Counter, return the value BEFORE anded.

Atomically nand a Counter, return the value BEFORE nanded.

Atomically or a Counter, return the value BEFORE ored.

Atomically xor a Counter, return the value BEFORE xored.

return value AFTER atomic operation

Atomically add a Counter, return the value AFTER added.

Atomically sub a Counter, return the value AFTER subbed.

Atomically and a Counter, return the value AFTER anded.

Atomically nand a Counter, return the value AFTER nanded.

Atomically or a Counter, return the value AFTER ored.

Atomically xor a Counter, return the value AFTER xored.

without returning

Atomically add a Counter.

Atomically sub a Counter

Atomically and a Counter

Atomically nand a Counter

Atomically or a Counter

Atomically xor a Counter