ekg-core-0.1.0.0: Data/Mutex.hs
module Data.Mutex
( Mutex
, new
, lock
, unlock
) where
import Data.Int (Int64)
import Foreign.ForeignPtr (ForeignPtr, mallocForeignPtr, withForeignPtr)
import Foreign.Ptr (Ptr)
import Foreign.Storable (poke)
newtype Mutex = M { unM :: ForeignPtr Int64 }
new :: IO Mutex
new = do
fp <- mallocForeignPtr
withForeignPtr fp $ \ p -> poke p 0
return $ M fp
lock :: Mutex -> IO ()
lock m = withForeignPtr (unM m) cLock
foreign import ccall unsafe "hs_lock" cLock :: Ptr Int64 -> IO ()
unlock :: Mutex -> IO ()
unlock m = withForeignPtr (unM m) cUnlock
foreign import ccall unsafe "hs_unlock" cUnlock :: Ptr Int64 -> IO ()