Copyright | (C) 2015 Edward Kmett and Ted Cooper |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <[email protected]>, Ted Cooper <[email protected]> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Control.Concurrent.RCU.QSBR.Internal
Description
QSBR-based RCU
Synopsis
- newtype SRef s a = SRef {}
- data RCUThread s a = RCUThread {
- rcuThreadId :: !ThreadId
- rcuThreadVar :: !(MVar a)
- newtype RCU s a = RCU {}
- runRCU :: (forall s. RCU s a) -> IO a
- runOnRCU :: Int -> (forall s. RCU s a) -> IO a
- newtype ReadingRCU s a = ReadingRCU {
- runReadingRCU :: RCUState -> IO a
- newtype WritingRCU s a = WritingRCU {
- runWritingRCU :: RCUState -> IO a
- data RCUState = RCUState {
- rcuStateGlobalCounter :: !Counter
- rcuStateThreadCountersR :: !(IORef [Counter])
- rcuStateThreadCountersLockV :: !(MVar ())
- rcuStateWriterLockV :: !(MVar ())
- rcuStateMyCounter :: !Counter
- rcuStatePinned :: !(Maybe Int)
Documentation
Shared references
Instances
This is a basic RCU
thread. It may be embellished when running in a more
exotic context.
Constructors
RCUThread | |
Fields
|
This is an RCU computation. It can use forking
and joining
to form
new threads, and then you can use reading
and writing
to run classic
read-side and write-side RCU computations. Writers are
serialized using an MVar, readers are able to proceed while writers are
updating.
Instances
MonadIO (RCU s) Source # | |||||||||||||
Defined in Control.Concurrent.RCU.QSBR.Internal | |||||||||||||
Applicative (RCU s) Source # | |||||||||||||
Functor (RCU s) Source # | |||||||||||||
Monad (RCU s) Source # | |||||||||||||
MonadNew (SRef s) (RCU s) Source # | |||||||||||||
MonadRCU (SRef s) (RCU s) Source # | |||||||||||||
Defined in Control.Concurrent.RCU.QSBR.Internal Associated Types
| |||||||||||||
type Reading (RCU s) Source # | |||||||||||||
Defined in Control.Concurrent.RCU.QSBR.Internal | |||||||||||||
type Thread (RCU s) Source # | |||||||||||||
Defined in Control.Concurrent.RCU.QSBR.Internal | |||||||||||||
type Writing (RCU s) Source # | |||||||||||||
Defined in Control.Concurrent.RCU.QSBR.Internal |
runOnRCU :: Int -> (forall s. RCU s a) -> IO a Source #
Run an RCU computation in a thread pinned to a particular core.
newtype ReadingRCU s a Source #
This is the basic read-side critical section for an RCU computation
Constructors
ReadingRCU | |
Fields
|
Instances
MonadFail (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods fail :: String -> ReadingRCU s a # | |
Alternative (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods empty :: ReadingRCU s a # (<|>) :: ReadingRCU s a -> ReadingRCU s a -> ReadingRCU s a # some :: ReadingRCU s a -> ReadingRCU s [a] # many :: ReadingRCU s a -> ReadingRCU s [a] # | |
Applicative (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods pure :: a -> ReadingRCU s a # (<*>) :: ReadingRCU s (a -> b) -> ReadingRCU s a -> ReadingRCU s b # liftA2 :: (a -> b -> c) -> ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s c # (*>) :: ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s b # (<*) :: ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s a # | |
Functor (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods fmap :: (a -> b) -> ReadingRCU s a -> ReadingRCU s b # (<$) :: a -> ReadingRCU s b -> ReadingRCU s a # | |
Monad (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods (>>=) :: ReadingRCU s a -> (a -> ReadingRCU s b) -> ReadingRCU s b # (>>) :: ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s b # return :: a -> ReadingRCU s a # | |
MonadPlus (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal | |
MonadNew (SRef s) (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods newSRef :: a -> ReadingRCU s (SRef s a) Source # | |
MonadReading (SRef s) (ReadingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods readSRef :: SRef s a -> ReadingRCU s a Source # |
newtype WritingRCU s a Source #
This is the basic write-side critical section for an RCU computation
Constructors
WritingRCU | |
Fields
|
Instances
MonadFail (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods fail :: String -> WritingRCU s a # | |
Alternative (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods empty :: WritingRCU s a # (<|>) :: WritingRCU s a -> WritingRCU s a -> WritingRCU s a # some :: WritingRCU s a -> WritingRCU s [a] # many :: WritingRCU s a -> WritingRCU s [a] # | |
Applicative (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods pure :: a -> WritingRCU s a # (<*>) :: WritingRCU s (a -> b) -> WritingRCU s a -> WritingRCU s b # liftA2 :: (a -> b -> c) -> WritingRCU s a -> WritingRCU s b -> WritingRCU s c # (*>) :: WritingRCU s a -> WritingRCU s b -> WritingRCU s b # (<*) :: WritingRCU s a -> WritingRCU s b -> WritingRCU s a # | |
Functor (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods fmap :: (a -> b) -> WritingRCU s a -> WritingRCU s b # (<$) :: a -> WritingRCU s b -> WritingRCU s a # | |
Monad (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods (>>=) :: WritingRCU s a -> (a -> WritingRCU s b) -> WritingRCU s b # (>>) :: WritingRCU s a -> WritingRCU s b -> WritingRCU s b # return :: a -> WritingRCU s a # | |
MonadPlus (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal | |
MonadNew (SRef s) (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods newSRef :: a -> WritingRCU s (SRef s a) Source # | |
MonadReading (SRef s) (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods readSRef :: SRef s a -> WritingRCU s a Source # | |
MonadWriting (SRef s) (WritingRCU s) Source # | |
Defined in Control.Concurrent.RCU.QSBR.Internal Methods writeSRef :: SRef s a -> a -> WritingRCU s () Source # synchronize :: WritingRCU s () Source # |
State for an RCU computation.
Constructors
RCUState | |
Fields
|