---
name: "ck_pr_fence_load_atomic"
section: "3"
platform: "linux"
package: "libck-dev"
version: "0.7.2-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ck_pr_fence_load_atomic"
---

# ck\_pr\_fence\_load\_atomic(3)

enforce ordering of load operations to atomic read-modify-write operations

## NAME

**ck\_pr\_fence\_load\_atomic** – enforce ordering of load operations to atomic read-modify-write operations

## LIBRARY

Concurrency Kit (libck, -lck)

## SYNOPSIS

**#include \<ck\_pr.h\>**

*void*\

**ck\_pr\_fence\_load\_atomic**(*void*);

*void*\

**ck\_pr\_fence\_strict\_load\_atomic**(*void*);

## DESCRIPTION

This function enforces the ordering of any memory load and **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 **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 **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.

## SEE ALSO

[ck\_pr\_stall(3)](/ck_pr_stall/3.md), [ck\_pr\_fence\_atomic(3)](/ck_pr_fence_atomic/3.md), [ck\_pr\_fence\_atomic\_store(3)](/ck_pr_fence_atomic_store/3.md), [ck\_pr\_fence\_atomic\_load(3)](/ck_pr_fence_atomic_load/3.md), [ck\_pr\_fence\_load\_depends(3)](/ck_pr_fence_load_depends/3.md), [ck\_pr\_fence\_load\_store(3)](/ck_pr_fence_load_store/3.md), [ck\_pr\_fence\_store(3)](/ck_pr_fence_store/3.md), [ck\_pr\_fence\_memory(3)](/ck_pr_fence_memory/3.md), [ck\_pr\_barrier(3)](/ck_pr_barrier/3.md), [ck\_pr\_fas(3)](/ck_pr_fas/3.md), [ck\_pr\_load(3)](/ck_pr_load/3.md), [ck\_pr\_store(3)](/ck_pr_store/3.md), [ck\_pr\_faa(3)](/ck_pr_faa/3.md), [ck\_pr\_inc(3)](/ck_pr_inc/3.md), [ck\_pr\_dec(3)](/ck_pr_dec/3.md), [ck\_pr\_neg(3)](/ck_pr_neg/3.md), [ck\_pr\_not(3)](/ck_pr_not/3.md), [ck\_pr\_add(3)](/ck_pr_add/3.md), [ck\_pr\_sub(3)](/ck_pr_sub/3.md), [ck\_pr\_and(3)](/ck_pr_and/3.md), [ck\_pr\_or(3)](/ck_pr_or/3.md), [ck\_pr\_xor(3)](/ck_pr_xor/3.md), [ck\_pr\_cas(3)](/ck_pr_cas/3.md), [ck\_pr\_btc(3)](/ck_pr_btc/3.md), [ck\_pr\_bts(3)](/ck_pr_bts/3.md), [ck\_pr\_btr(3)](/ck_pr_btr/3.md)

Additional information available at http://concurrencykit.org/
