package ambient-context

  1. Overview
  2. Docs
Abstraction over thread-local / continuation-local storage mechanisms for communication with transitive dependencies

Install

dune-project
 Dependency

Authors

Maintainers

Sources

ambient-context-0.2.tbz
sha256=f451f4ed467ef0c15f472cda1021a89e96afdf3a32970ea047faf057a01c72d3
sha512=3115fd7b45ac171f7a971013dd6f32ec317fc274d800a86870a0dd43574e27b404090fbc51dae5e4c8af4961d706f84abf3843a6cf8dc57f711211cd2b547780

doc/src/ambient-context.atomic/util_atomic.ml.html

Source file util_atomic.ml

1
2
3
4
5
6
7
8
9
10
11
12
(** Update loop *)
let update_cas (type res) (self : 'a Atomic.t) (f : 'a -> res * 'a) : res =
  let exception Ret of res in
  try
    while true do
      let old_val = Atomic.get self in
      let res, new_val = f old_val in
      if Atomic.compare_and_set self old_val new_val then
        raise_notrace (Ret res)
    done;
    assert false
  with Ret r -> r