Multicore_magic.Atomic_arrayArray of (potentially unboxed) atomic locations.
Where available, this uses an undocumented operation exported by the OCaml 5 runtime, caml_atomic_cas_field, which makes it possible to perform sequentially consistent atomic updates of record fields and array elements.
Hopefully a future version of OCaml provides more comprehensive and even more efficient support for both sequentially consistent and relaxed atomic operations on records and arrays.
val make : int -> 'a -> 'a tmake n value creates a new array of n atomic locations having given value.
val of_array : 'a array -> 'a tof_array non_atomic_array create a new array of atomic locations as a copy of the given non_atomic_array.
val init : int -> (int -> 'a) -> 'a tinit n fn is equivalent to of_array (Array.init n fn).
val length : 'a t -> intlength atomic_array returns the length of the atomic_array.
val unsafe_fenceless_get : 'a t -> int -> 'aunsafe_fenceless_get atomic_array index reads and returns the value at the specified index of the atomic_array.
⚠️ The read is relaxed and may be reordered with respect to other reads and writes in program order.
⚠️ No bounds checking is performed.
val unsafe_fenceless_set : 'a t -> int -> 'a -> unitunsafe_fenceless_set atomic_array index value writes the given value to the specified index of the atomic_array.
⚠️ The write is relaxed and may be reordered with respect to other reads and (non-initializing) writes in program order.
⚠️ No bounds checking is performed.
val unsafe_compare_and_set : 'a t -> int -> 'a -> 'a -> boolunsafe_compare_and_set atomic_array index before after atomically updates the specified index of the atomic_array to the after value in case it had the before value and returns a boolean indicating whether that was the case. This operation is sequentially consistent and may not be reordered with respect to other reads and writes in program order.
⚠️ No bounds checking is performed.