CK_PR_BTC(3)
π ck_pr_btc(3) β atomic bit test-and-complement, bestie edition
okay so. picture this. you're in ck_pr_btc(3) (that's the manual page name, hi, it's me) and you need to flip ONE single bit. not the whole word. ONE bit. and you need it to happen atomically so nobody else on another thread can sneak in and ruin your whole vibe. that's the assignment. let's get into it. π
π LIBRARY
Concurrency Kit β link it with -lck and you're in. β¨
πΈ SYNOPSIS
#include <ck_pr.h>
bool
ck_pr_btc_ptr(void *target, unsigned int bit_index);
bool
ck_pr_btc_uint(uint *target, unsigned int bit_index);
bool
ck_pr_btc_int(int *target, unsigned int bit_index);
bool
ck_pr_btc_64(uint64_t *target, unsigned int bit_index);
bool
ck_pr_btc_32(uint32_t *target, unsigned int bit_index);
bool
ck_pr_btc_16(uint16_t *target, unsigned int bit_index);
look at that family portrait. six siblings. one job. π«Ά
π DESCRIPTION
so the ck_pr_btc(3) family of functions atomically fetch the value of the bit in target at index bit_index, and then set that bit to its complement.
read that again. it reads the bit and flips it. both. atomically. no one can interrupt the glow-up. it's giving "test-and-complement", and it ate. π₯
btc = bit test and complement, iykyk. the "test" part is the return value (the OLD bit), the "complement" part is what happens to the bit (it becomes ~bit, aka the opposite of whatever it was). slay.
β¨ RETURN VALUES
these functions return the original value of the bit at offset bit_index β like, the value it had before you flipped it β inside the value pointed to by target.
so if the bit was 1, you get 1 back and the bit is now 0. if the bit was 0, you get 0 back and the bit is now 1. the return value is the receipt. π§Ύπ
π SEE ALSO
ck_pr_fence_load(3)ck_pr_fence_load_depends(3)ck_pr_fence_store(3)ck_pr_fence_memory(3)ck_pr_load(3)ck_pr_store(3)ck_pr_fas(3)ck_pr_faa(3)ck_pr_inc(3)ck_pr_dec(3)ck_pr_neg(3)ck_pr_not(3)ck_pr_sub(3)ck_pr_and(3)ck_pr_or(3)ck_pr_xor(3)ck_pr_add(3)ck_pr_btc(3)ck_pr_btr(3)ck_pr_cas(3)
and more lore at http://concurrencykit.org/ if you wanna spiral (in a fun way). π
that's the whole page, bestie. go flip some bits responsibly. π
Concurrency Kit, April 11, 2013 β that's the source/version and the date, mwah, no cap, the end. π¦β¨
π¦ 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