CK_PR_FENCE_MEMORY(3)
π ck_pr_fence_memory β bestie, it's a fence, but for MEMORY π
okay so this page is ck_pr_fence_memory(3), and it lives in the Concurrency Kit library β that's libck, and you link it with -lck. π
It's giving "enforce partial ordering of all memory operations." Slay.
β¨ LIBRARY β¨
Concurrency Kit, aka libck, and you link it with the -lck flag. no cap, that's the whole vibe. π¦
πΈ SYNOPSIS πΈ
#include <ck_pr.h>
void
ck_pr_fence_memory();
void
ck_pr_fence_strict_memory();
two little functions, zero arguments, zero drama. π
π« DESCRIPTION π«
so ck_pr_fence_memory(3) enforces the ordering of any memory operations with respect to the invocation of the function itself. like, everything before it stays before it, everything after it stays after it. periodt. π₯
this function always serves as an implicit compiler barrier. always. even when nothing else happens, the compiler knows to behave. π
now the architecture tea β: architectures implementing CK_MD_TSO do not emit a barrier β but the compiler barrier semantics still remain, so don't panic. meanwhile, architectures implementing CK_MD_PSO and CK_MD_RMO always emit an instruction that provides the specified ordering guarantees.
and if you want to force the unconditional emission of a memory fence, no matter what the architecture thinks it can get away with? that's what ck_pr_fence_strict_memory() is for. she does not negotiate. πβ¨
π§ EXAMPLE π§
#include <ck_pr.h>
static int a = 0;
static int b;
static int c;
static int d;
void
function(void)
{
int snapshot_a;
ck_pr_store_int(&b, 1);
snapshot_a = ck_pr_load_int(&a);
/*
* Make sure previous memory operations are
* ordered with respect to memory operations
* following the ck_pr_fence_memory.
*/
ck_pr_fence_memory();
ck_pr_store_int(&d, 3);
ck_pr_store_int(&c, 2);
return;
}
see how she just chills there in the middle, holding the line between the before and the after? main character energy fr fr. π
π RETURN VALUES π
this function has no return value. nothing to return, nothing to check, just vibes. π«Ά
π SEE ALSO π
ck_pr_stall(3)ck_pr_fence_atomic(3)ck_pr_fence_atomic_store(3)ck_pr_fence_atomic_load(3)ck_pr_fence_load(3)ck_pr_fence_load_depends(3)ck_pr_fence_store(3)ck_pr_barrier(3)ck_pr_fas(3)ck_pr_load(3)ck_pr_store(3)ck_pr_faa(3)ck_pr_inc(3)ck_pr_dec(3)ck_pr_neg(3)ck_pr_not(3)ck_pr_add(3)ck_pr_sub(3)ck_pr_and(3)ck_pr_or(3)ck_pr_xor(3)ck_pr_cas(3)ck_pr_btc(3)ck_pr_bts(3)ck_pr_btr(3)
additional info is available at http://concurrencykit.org/ β go look, iykyk. π
okay that's the whole page bestie, you ate this one π this was the ck_pr_fence_memory(3) page from April 7, 2013, so like, she's an elder but she still serves β¨ mwah, go write some correct concurrent code, i'm obsessed π
π¦ where this page comes from
- alpine 3.24: ck-doc 0.7.2-r1 Β· BSD-2-Clause AND Apache-2.0
- debian bookworm: libck-dev 0.7.1-10 Β· BSD-2-Clause
- debian trixie: libck-dev 0.7.2-6 Β· BSD-2-Clause
- epel 10: ck-devel 0.7.2-1.el10_1 Β· BSD-2-clause AND Apache-2.0 AND BSD-3-clause
- epel 9: ck-devel 0.7.0-10.el9 Β· BSD
- fedora 43: ck-devel 0.7.2-2.fc43 Β· BSD-2-clause AND Apache-2.0 AND BSD-3-clause
- fedora 43: ck-devel 0.7.2-2.fc43 Β· BSD-2-clause AND Apache-2.0 AND BSD-3-clause
- fedora 44: ck-devel 0.7.2-4.fc44 Β· BSD-2-clause AND Apache-2.0 AND BSD-3-clause
- fedora 44: ck-devel 0.7.2-4.fc44 Β· BSD-2-clause AND Apache-2.0 AND BSD-3-clause
- nixos 26.05: ck 0.7.2
- nixpkgs unstable: ck 0.7.2
- opensuse-leap 16.0: ck-devel 0.7.2-bp160.1.9 Β· Apache-2.0 AND BSD-2-Clause
- opensuse-leap 16.0: ck-devel 0.7.2-bp160.1.9 Β· Apache-2.0 AND BSD-2-Clause
- opensuse-leap 16.0: ck-devel 0.7.2-bp160.1.9 Β· Apache-2.0 AND BSD-2-Clause
- ubuntu jammy: libck-dev 0.7.1-6ubuntu2 Β· BSD-2-Clause
- ubuntu noble: libck-dev 0.7.1-13build1 Β· BSD-2-Clause
- ubuntu questing: libck-dev 0.7.2-5ubuntu1
- ubuntu resolute: libck-dev 0.7.2-5ubuntu2 Β· BSD-2-Clause
- ubuntu stonking: libck-dev 0.7.2-11 Β· BSD-2-Clause
- Copyright 2013 Samy Al Bahra
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms