Module STM
module STM: sig .. end
Minimalistic implementation of a Software Transactional Memory.
WARNING: the current implementation has only been lightly tested.
This module provides support for a partial STM, that protects
only values of type STM.ref
.
type 'a ref
The type of values protected by transactions, should store only
immutable values.
val ref : 'a -> 'a ref
Builds a value of type ref
, that can then only be accessed during
a transaction.
exception Retry
The exception used to request the current transaction to restart.
exception Abort
The exception used to request the current transaction to be
cancelled. Any exception can be used to abort a transaction, but this
one makes programs more readable.
exception Cancelled
The exception used to indicate that the transaction is cancelled,
because it has failed and retries have been exhausted.
val run : ?retries:int ->
(('a ref -> 'a) -> ('a ref -> 'a -> unit) -> 'b) -> 'b
run ~retries f
executes the function f
inside a newly-created
transaction. Function f
is passed two functions g
and s
that
are to be used as respectively read and write accessors to ref
values. The retries
parameter (defaulting to 64
) indicates how
many time a transaction should be retried. g
and s
will raise
Failure
is they are called from another thread, or outside the
lifetime of the transaction.
The Retry
exception can be raised to requested the current
transaction to be re-executed from the beginning, while any other
exception will cause the transaction to be aborted.
Raises the exception raised by the transaction, if different from
Retry
.
Raises Cancelled
if the transaction cannot be committed, and retries
have been exhausted
val run_read_only : ?retries:int -> (('a ref -> 'a) -> 'b) -> 'b
Akin to
STM.run
, but with a smaller overhead due to the fact that the
transaction is guaranteed to only read values.