package dscheck
Module Dscheck.TracedAtomicSource
An atomic (mutable) reference to a value of type 'a.
Create an atomic reference that is alone on a cache line. It occupies 4-16x the memory of one allocated with make v.
The primary purpose is to prevent false-sharing and the resulting performance degradation. When a CPU performs an atomic operation, it temporarily takes ownership of an entire cache line that contains the atomic reference. If multiple atomic references share the same cache line, modifying these disjoint memory regions simultaneously becomes impossible, which can create a bottleneck. Hence, as a general guideline, if an atomic reference is experiencing contention, assigning it its own cache line may enhance performance.
Set a new value for the atomic reference, and return the current value.
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.
fetch_and_add r n atomically increments the value of r by n, and returns the current value (before the increment).
val trace :
?impl:[ `Random of int | `Dpor | `Dpor_source ] ->
?interleavings:out_channel ->
?record_traces:bool ->
(unit -> unit) ->
unittrace ?interleavings ?record_traces f starts the simulation trace.
impl lets user choose the underlying exploration algorithm.
If interleavings output channel is provided, DSCheck will continously print the visited interleavings there.
record_traces enables Trace_tracker, which is typically used for testing DSCheck itself.
spawn f as a new 'thread'
if f returns false then an assertion has failed
run f after all processes complete
run f between every possible interleaving