-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathatomic.mli
62 lines (49 loc) · 2.74 KB
/
atomic.mli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Stephen Dolan, University of Cambridge *)
(* Gabriel Scherer, projet Partout, INRIA Paris-Saclay *)
(* *)
(* Copyright 2020 Institut National de Recherche en Informatique et *)
(* en Automatique. *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
(** This module provides a purely sequential implementation of the
concurrent atomic references provided by the Multicore OCaml
standard library:
https://github.com/ocaml-multicore/ocaml-multicore/blob/parallel_minor_gc/stdlib/atomic.mli
This sequential implementation is provided in the interest of
compatibility: when people will start writing code to run on
Multicore, it would be nice if their use of Atomic was
backward-compatible with older versions of OCaml without having to
import additional compatibility layers.
@since 4.12
*)
(** An atomic (mutable) reference to a value of type ['a]. *)
type !'a t
(** Create an atomic reference. *)
val make : 'a -> 'a t
(** Get the current value of the atomic reference. *)
val get : 'a t -> 'a
(** Set a new value for the atomic reference. *)
val set : 'a t -> 'a -> unit
(** Set a new value for the atomic reference, and return the current value. *)
val exchange : 'a t -> 'a -> 'a
(** [compare_and_set r seen v] sets the new value of [r] to [v] only
if its current value is physically equal to [seen] -- the
comparison and the set occur atomically. Returns [true] if the
comparison succeeded (so the set happened) and [false]
otherwise. *)
val compare_and_set : 'a t -> 'a -> 'a -> bool
(** [fetch_and_add r n] atomically increments the value of [r] by [n],
and returns the current value (before the increment). *)
val fetch_and_add : int t -> int -> int
(** [incr r] atomically increments the value of [r] by [1]. *)
val incr : int t -> unit
(** [decr r] atomically decrements the value of [r] by [1]. *)
val decr : int t -> unit