CK_PR_STALL(3)
π ck_pr_stall β the busy-wait bestie π
okay so bestie, welcome to ck_pr_stall(3) β she's tiny, she's iconic, and she lives in the Concurrency Kit (that's libck, link her with -lck). no cap, this is the whole page. let's go π«Ά
β¨ LIBRARY β¨
Concurrency Kit β aka libck, and you link it with -lck. that's the whole vibe. π
πΈ SYNOPSIS πΈ
#include <ck_pr.h>
void
ck_pr_stall(void);
like... that's it. no arguments, no return value, just vibes and a function call. π
π¦ DESCRIPTION π¦
okay so listen. the ck_pr_stall(3) function is the girl you call when you're stuck in the retry paths of busy-wait loops. she belongs inside the loop, doing her little spin, not outside wondering what's happening.
and the way that she's lowkey doing two jobs at once?? first: she acts as a compiler barrier β which means the compiler can't just waltz in and reorder everything around her, periodt. second: on some architectures she emits cycle-saving instructions, which is highkey a slay because your CPU gets to chill instead of burning cycles for no reason. π
so basically: busy-waiting? fine. busy-waiting without her? not the move, bestie. π
π EXAMPLE π
here's her in her natural habitat, doing main character energy inside a while loop:
#include <ck_pr.h>
static int ready = 0;
void
function(void)
{
/* Busy-wait until ready is non-zero. */
while (ck_pr_load_int(&ready) == 0)
ck_pr_stall();
return;
}
see how she sits right there in the retry path?? that's the assignment. she's not the star of the loop, she's the supporting icon making the loop bearable. β¨
π SEE ALSO π
her whole friend group, fr fr β go read these too:
ck_pr_fence_load(3)ck_pr_fence_load_depends(3)ck_pr_fence_store(3)ck_pr_fence_memory(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)
and if you want even more lore, there's additional information available at http://concurrencykit.org/ ππ
no cap, that's genuinely every single thing on the page. every flag, every reference, every line of code β all accounted for. nothing skipped, nothing invented. π§
and that's the whole page, bestie!! π₯³ this one's dated April 7, 2013, and it's ck_pr_stall(3) β mwah, love her, obsessed, no notes. πβ¨πΈπ¦ππ
π«Ά
π¦ 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