Computation.Tx
Transactional interface for atomically completing multiple computations.
⚠️ The implementation of this mechanism is designed to avoid making the single computation completing operations, i.e. try_return
and try_cancel
, slower and to avoid making computations heavier. For this reason the transaction mechanism is only obstruction-free. What this means is that a transaction may be aborted by another transaction or by a single computation manipulating operation.
type 'a computation := 'a t
Destructively substituted alias for Computation.t
.
val same : _ computation -> _ computation -> bool
same computation1 computation2
determines whether the two computations are the one and the same.
val create : unit -> t
create ()
returns a new empty transaction.
val try_return : t -> 'a computation -> 'a -> bool
try_return tx computation value
adds the completion of the computation
as having returned the given value
to the transaction. Returns true
in case the computation had not yet been completed and the transaction was still alive. Otherwise returns false
which means that transaction was aborted and it is as if none of the completions succesfully added to the transaction have taken place.
val try_cancel :
t ->
'a computation ->
exn ->
Stdlib.Printexc.raw_backtrace ->
bool
try_cancel tx computation exn bt
adds the completion of the computation as having canceled with the given exception and backtrace to the transaction. Returns true
in case the computation had not yet been completed and the transaction was still alive. Otherwise returns false
which means that transaction was aborted and it is as if none of the completions succesfully added to the transaction have taken place.
val try_commit : t -> bool
try_commit tx
attempts to mark the transaction as committed successfully. Returns true
in case of success, which means that all the completions added to the transaction have been performed atomically. Otherwise returns false
which means that transaction was aborted and it is as if none of the completions succesfully added to the transaction have taken place.