ck_pr_fence_load_atomic(3)
enforce ordering of load operations to atomic read-modify-write operations
LIBRARY
Concurrency Kit (libck, -lck)
SYNOPSIS
In ck_pr.h
Ft void
Fn ck_pr_fence_load_atomic void
Ft void
Fn ck_pr_fence_strict_load_atomic void
DESCRIPTION
This function enforces the ordering of any memory load
and
Fn ck_pr_load 3
operations with respect to store operations relative to
the invocation of the function. Any store operations that
were committed on remote processors
and received by the calling processor before the invocation of
Fn ck_pr_fence_load_atomic
is also be made visible only after a call to
the ck_pr_fence_load family of functions.
This function always serves as an implicit compiler barrier.
On architectures with CK_MD_TSO or CK_MD_PSO specified (total store ordering
and partial store ordering respectively), this operation only serves
as a compiler barrier and no fence instructions will be emitted. To
force the unconditional emission of a load fence, use
Fn ck_pr_fence_strict_load_atomic .
Architectures implementing CK_MD_RMO always emit a fence.
EXAMPLE
#include <ck_pr.h>
static unsigned int a;
static unsigned int b;
void
function(void)
{
unsigned int snapshot_a, snapshot_b;
snapshot_a = ck_pr_load_uint(&a);
/*
* Guarantee that the load from "a" completes
* before the update to "b".
*/
ck_pr_fence_load_atomic();
ck_pr_fas_uint(&b, 1);
return;
}
RETURN VALUES
This function has no return value.