- data Room u
- newRoom :: u -> IO (Room u)
- userData :: Room u -> u
- inUse :: Room u -> STM (Set ThreadId)
- data Claim u
- claimedRoom :: Claim u -> Room u
- claimedThread :: Claim u -> ThreadId
- data ClaimMode
- claim :: (RoomGroup c, ClaimContext c) => ClaimMode -> c -> IO a -> IO a
- approveClaims :: RoomConstraint u => [Claim u] -> STM ()
- approve :: Claim u -> STM ()
- isEmpty :: Room u -> STM Bool
Documentation
A resource pool, parameterized against arbitrary user data.
claimedThread :: Claim u -> ThreadIdSource
Get the thread attempting a Claim
.
claim :: (RoomGroup c, ClaimContext c) => ClaimMode -> c -> IO a -> IO aSource
Temporarily Acquire
, and then release, or Release
, and then acquire, some Room
s for the duration of a critical section.
A simple example where a room might be used to prevent interleaving of stdout
:
room <- newRoom (MaxThreads 1) forkIO $ claim Acquire (Default,room) $ putStrLn "Hello World!" forkIO $ claim Acquire (Default,room) $ putStrLn "Foo! Bar!"
approveClaims :: RoomConstraint u => [Claim u] -> STM ()Source
approve
some claims according to their constraints.