---
name: "ck_pr_fence_load"
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"
---

# ck\_pr\_fence\_load(3)

enforce partial ordering of load operations

## NAME

**ck\_pr\_fence\_load** – enforce partial ordering of load operations

## LIBRARY

Concurrency Kit (libck, -lck)

## SYNOPSIS

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

*void*\

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

*void*\

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

## DESCRIPTION

This function enforces the ordering of any memory load and **ck\_pr\_load**(*3*) 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**() is also be made visible only after a call to **ck\_pr\_fence\_load**(). 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**(). Architectures implementing CK\_MD\_RMO always emit a load 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 load from "b".
	 */
	ck_pr_fence_load();
	snapshot_b = ck_pr_load_uint(&b);
	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\_atomic(3)](/ck_pr_fence_load_atomic/3.md), [ck\_pr\_fence\_load\_store(3)](/ck_pr_fence_load_store/3.md), [ck\_pr\_fence\_load\_depends(3)](/ck_pr_fence_load_depends/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/
