rcu-0: STM-based Read-Copy-Update

Copyright(C) 2015 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellTrustworthy
LanguageHaskell2010

Control.Concurrent.RCU.Class

Description

 

Synopsis

Documentation

data SRef s a Source

Shared references

Instances

Eq (SRef s a) Source 

class Monad m => MonadNew s m | m -> s where Source

Minimal complete definition

Nothing

Methods

newSRef :: a -> m (SRef s a) Source

Build a new shared reference

Instances

MonadNew s (RCU s) Source 
MonadNew s (WritingRCU s) Source 
MonadNew s (ReadingRCU s) Source 
MonadNew s m => MonadNew s (IdentityT m) Source 
MonadNew s m => MonadNew s (MaybeT m) Source 
MonadNew s m => MonadNew s (ExceptT e m) Source 
MonadNew s' m => MonadNew s' (StateT s m) Source 
MonadNew s' m => MonadNew s' (StateT s m) Source 
(MonadNew s m, Monoid w) => MonadNew s (WriterT w m) Source 
(MonadNew s m, Monoid w) => MonadNew s (WriterT w m) Source 
MonadNew s m => MonadNew s (ReaderT e m) Source 
(MonadNew s' m, Monoid w) => MonadNew s' (RWST r w s m) Source 
(MonadNew s' m, Monoid w) => MonadNew s' (RWST r w s m) Source 

class MonadNew s m => MonadReading s m | m -> s where Source

This is a read-side critical section

Minimal complete definition

Nothing

Methods

readSRef :: SRef s a -> m a Source

Read a shared reference.

class MonadReading s m => MonadWriting s m | m -> s where Source

This is a write-side critical section

Minimal complete definition

Nothing

Methods

writeSRef :: SRef s a -> a -> m () Source

Write to a shared reference.

synchronize :: m () Source

Synchronize with other writers.

No other writer can straddle this time bound. It will either see writes from before, or writes after, but never some of both!

class (MonadReading s (Reading m), MonadWriting s (Writing m), MonadNew s m) => MonadRCU s m | m -> s where Source

This is the executor service that can fork, join and execute critical sections.

Associated Types

type Reading m :: * -> * Source

A read-side critical section

type Writing m :: * -> * Source

A write-side critical section

type Thread m :: * -> * Source

Threads we can fork and join

Methods

forking :: m a -> m (Thread m a) Source

Fork a thread

joining :: Thread m a -> m a Source

Join a thread

reading :: Reading m a -> m a Source

Run a read-side critical section

writing :: Writing m a -> m a Source

Run a write-side critical section

Instances

MonadRCU s (RCU s) Source 
MonadRCU s m => MonadRCU s (MaybeT m) Source 
MonadRCU s m => MonadRCU s (IdentityT m) Source 
(MonadRCU s m, Monoid e) => MonadRCU s (WriterT e m) Source 
(MonadRCU s m, Monoid e) => MonadRCU s (WriterT e m) Source 
MonadRCU s m => MonadRCU s (ExceptT e m) Source 
MonadRCU s m => MonadRCU s (ReaderT e m) Source