module AtomicReference: sig .. end
Atomic containers for values.
type 'a t = java'util'concurrent'atomic'AtomicReference java_instance
The type of atomic containers for values.
WARNING: physical comparison is used by the container.
CONSEQUENCE 1: should be used with caution to store int32
,
int64
, nativeint
, or double
values as they are wrapped into
blocks. Hence, comparisons are done on block addresses rather than
on wrapped values.
CONSEQUENCE 2: as OCaml-Java uses boxed values for int
values,
the container should not be used to store int
values.
Any other type can be safely stored (caching of some int
values
ensure that sum types are correctly handled).
val make : 'a -> 'a t
Returns a new container holding the passed value.
val compare_and_set : 'a t -> 'a -> 'a -> bool
compare_and_set a e u
atomically sets the value of a
to u
if
the current value is e
. Returns whether the value of a
was equal
to e
.
val get : 'a t -> 'a
Returns the current value.
val get_and_set : 'a t -> 'a -> 'a
get_and_set a x
atomically sets the value of a
to x
, and
returns the previous value.
val lazy_set : 'a t -> 'a -> unit
lazy_set a x
eventually sets the value of a
to x
.
val set : 'a t -> 'a -> unit
set a x
sets the value of a
to x
.
val weak_compare_and_set : 'a t -> 'a -> 'a -> bool
Null value
val null : 'a t
The null
value.
val is_null : 'a t -> bool
is_null obj
returns true
iff obj
is equal to null
.
val is_not_null : 'a t -> bool
is_not_null obj
returns false
iff obj
is equal to null
.
Miscellaneous
val wrap : 'a t -> 'a t option
wrap obj
wraps the reference
obj
into an option type:
Some x
if obj
is not null
;
None
if obj
is null
.
val unwrap : 'a t option -> 'a t
unwrap obj
unwraps the option
obj
into a bare reference:
Some x
is mapped to x
;
None
is mapped to null
.