lvish-1.0: Data/Concurrent/AlignedIORef.hs
{-# LANGUAGE NamedFieldPuns #-}
-- | Cacheline-aligned wrappers around IORefs. Currently doing nothing.
module Data.Concurrent.AlignedIORef (AlignedIORef(), newAlignedIORef, ref)
where
import Data.IORef
import Control.Monad
data AlignedIORef a = AlignedIORef {
-- pad out to 64 bytes to avoid false sharing (assuming 4 byte words and 64
-- byte cachelines)
-- padding :: [IORef a],
ref :: {-# UNPACK #-} !(IORef a)
}
newAlignedIORef v = do
ref <- newIORef v
-- padding <- replicateM 15 $ newIORef v
return AlignedIORef {
-- padding,
ref
}