rcu-0.2.6: Read-Copy-Update for Haskell
Copyright(C) 2015 Edward Kmett and Ted Cooper
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>, Ted Cooper <anthezium@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Control.Concurrent.RCU.QSBR.Internal

Description

QSBR-based RCU

Synopsis

Documentation

newtype SRef s a Source #

Shared references

Constructors

SRef 

Fields

Instances

Instances details
MonadRCU (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Associated Types

type Reading (RCU s) :: Type -> Type Source #

type Writing (RCU s) :: Type -> Type Source #

type Thread (RCU s) :: Type -> Type Source #

Methods

forking :: RCU s a -> RCU s (Thread (RCU s) a) Source #

joining :: Thread (RCU s) a -> RCU s a Source #

reading :: Reading (RCU s) a -> RCU s a Source #

writing :: Writing (RCU s) a -> RCU s a Source #

MonadWriting (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

writeSRef :: SRef s a -> a -> WritingRCU s () Source #

synchronize :: WritingRCU s () Source #

MonadReading (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> WritingRCU s a Source #

MonadReading (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> ReadingRCU s a Source #

MonadNew (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> RCU s (SRef s a) Source #

MonadNew (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> WritingRCU s (SRef s a) Source #

MonadNew (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> ReadingRCU s (SRef s a) Source #

Eq (SRef s a) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

(==) :: SRef s a -> SRef s a -> Bool #

(/=) :: SRef s a -> SRef s a -> Bool #

data RCUThread s a Source #

This is a basic RCU thread. It may be embellished when running in a more exotic context.

Constructors

RCUThread 

Fields

newtype RCU s a Source #

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.

Constructors

RCU 

Fields

Instances

Instances details
Monad (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

(>>=) :: RCU s a -> (a -> RCU s b) -> RCU s b #

(>>) :: RCU s a -> RCU s b -> RCU s b #

return :: a -> RCU s a #

Functor (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fmap :: (a -> b) -> RCU s a -> RCU s b #

(<$) :: a -> RCU s b -> RCU s a #

Applicative (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

pure :: a -> RCU s a #

(<*>) :: RCU s (a -> b) -> RCU s a -> RCU s b #

liftA2 :: (a -> b -> c) -> RCU s a -> RCU s b -> RCU s c #

(*>) :: RCU s a -> RCU s b -> RCU s b #

(<*) :: RCU s a -> RCU s b -> RCU s a #

MonadIO (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

liftIO :: IO a -> RCU s a #

MonadRCU (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Associated Types

type Reading (RCU s) :: Type -> Type Source #

type Writing (RCU s) :: Type -> Type Source #

type Thread (RCU s) :: Type -> Type Source #

Methods

forking :: RCU s a -> RCU s (Thread (RCU s) a) Source #

joining :: Thread (RCU s) a -> RCU s a Source #

reading :: Reading (RCU s) a -> RCU s a Source #

writing :: Writing (RCU s) a -> RCU s a Source #

MonadNew (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> RCU s (SRef s a) Source #

type Reading (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Reading (RCU s) = ReadingRCU s
type Writing (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Writing (RCU s) = WritingRCU s
type Thread (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Thread (RCU s) = RCUThread s

runRCU :: (forall s. RCU s a) -> IO a Source #

Run an RCU computation.

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

Instances details
Monad (ReadingRCU s) Source # 
Instance details

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 #

Functor (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fmap :: (a -> b) -> ReadingRCU s a -> ReadingRCU s b #

(<$) :: a -> ReadingRCU s b -> ReadingRCU s a #

MonadFail (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fail :: String -> ReadingRCU s a #

Applicative (ReadingRCU s) Source # 
Instance details

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 #

Alternative (ReadingRCU s) Source # 
Instance details

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] #

MonadPlus (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

mzero :: ReadingRCU s a #

mplus :: ReadingRCU s a -> ReadingRCU s a -> ReadingRCU s a #

MonadReading (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> ReadingRCU s a Source #

MonadNew (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> ReadingRCU s (SRef s a) Source #

newtype WritingRCU s a Source #

This is the basic write-side critical section for an RCU computation

Constructors

WritingRCU 

Fields

Instances

Instances details
Monad (WritingRCU s) Source # 
Instance details

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 #

Functor (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fmap :: (a -> b) -> WritingRCU s a -> WritingRCU s b #

(<$) :: a -> WritingRCU s b -> WritingRCU s a #

MonadFail (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fail :: String -> WritingRCU s a #

Applicative (WritingRCU s) Source # 
Instance details

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 #

Alternative (WritingRCU s) Source # 
Instance details

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] #

MonadPlus (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

mzero :: WritingRCU s a #

mplus :: WritingRCU s a -> WritingRCU s a -> WritingRCU s a #

MonadWriting (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

writeSRef :: SRef s a -> a -> WritingRCU s () Source #

synchronize :: WritingRCU s () Source #

MonadReading (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> WritingRCU s a Source #

MonadNew (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> WritingRCU s (SRef s a) Source #

data RCUState Source #

State for an RCU computation.

Constructors

RCUState 

Fields