CK_PR_DEC(3)

πŸŽ€ NAME πŸŽ€

okay bestie, you made it to the manual page for ck_pr_dec(3) β€” that's the manual name, and it's staying right here at the top where you can see it πŸ’…. this is the whole glow-up squad of atomic decrement operations from Concurrency Kit, and every single one of them is listed below, in exactly the order the page prints them:

ck_pr_dec_ptr, ck_pr_dec_ptr_zero, ck_pr_dec_ptr_is_zero, ck_pr_dec_double, ck_pr_dec_double_zero, ck_pr_dec_double_is_zero, ck_pr_dec_char, ck_pr_dec_char_zero, ck_pr_dec_char_is_zero, ck_pr_dec_uint, ck_pr_dec_uint_zero, ck_pr_dec_char_is_zero, ck_pr_dec_int, ck_pr_dec_int_zero, ck_pr_dec_int_is_zero, ck_pr_dec_64, ck_pr_dec_64_zero, ck_pr_dec_64_is_zero, ck_pr_dec_32, ck_pr_dec_32_zero, ck_pr_dec_32_is_zero, ck_pr_dec_16, ck_pr_dec_16_zero, ck_pr_dec_32_is_zero, ck_pr_dec_8, ck_pr_dec_8_zero, ck_pr_dec_8_is_zero β€” atomic decrement operations

no shade but yes, a couple of names show up twice in that list β€” ck_pr_dec_char_is_zero and ck_pr_dec_32_is_zero each get a second turn 🫢. that is literally how the page prints it, so it's staying, periodt.

πŸ“š LIBRARY πŸ“š

Concurrency Kit (libck, -lck) ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

okay so first you gotta invite the header in:

#include <ck_pr.h>

and then, here's the entire roster of prototypes, copied character for character, no edits, no notes, no "improvements" πŸ’–:

void
ck_pr_dec_ptr(void *target);

void
ck_pr_dec_ptr_zero(void *target, bool *z);

bool
ck_pr_dec_ptr_is_zero(void *target);

void
ck_pr_dec_double(double *target);

void
ck_pr_dec_double_zero(double *target, bool *z);

bool
ck_pr_dec_double_is_zero(double *target);

void
ck_pr_dec_char(char *target);

void
ck_pr_dec_char_zero(char *target, bool *z);

bool
ck_pr_dec_char_is_zero(char *target);

void
ck_pr_dec_uint(unsigned int *target);

void
ck_pr_dec_uint_zero(unsigned int *target, bool *z);

bool
ck_pr_dec_uint_is_zero(unsigned int *target);

void
ck_pr_dec_int(int *target);

void
ck_pr_dec_int_zero(int *target, bool *z);

bool
ck_pr_dec_int_is_zero(int *target);

void
ck_pr_dec_64(uint64_t *target);

void
ck_pr_dec_64_zero(uint64_t *target, bool *z);

bool
ck_pr_dec_64_is_zero(uint64_t *target);

void
ck_pr_dec_32(uint32_t *target);

void
ck_pr_dec_32_zero(uint32_t *target, bool *z);

bool
ck_pr_dec_32_is_zero(uint32_t *target);

void
ck_pr_dec_16(uint16_t *target);

void
ck_pr_dec_16_zero(uint16_t *target, bool *z);

bool
ck_pr_dec_16_is_zero(uint16_t *target);

void
ck_pr_dec_8(uint8_t *target);

void
ck_pr_dec_8_zero(uint8_t *target, bool *z);

bool
ck_pr_dec_8_is_zero(uint8_t *target);

πŸ”₯ DESCRIPTION πŸ”₯

the ck_pr_dec(3) family of functions atomically decrement the value pointed to by target ✨

that's the whole bit. no torn reads, no drama, no "wait did that actually happen" β€” it happens, all at once, like a main character entrance πŸ‘‘


πŸ’– RETURN VALUES πŸ’–

here's where it gets juicy, so pay attention bestie:

  • the ck_pr_dec_zero family of functions set the value pointed to by z to true if the result of the decrement operation was 0 πŸŽ‰
  • they set the value pointed to by z to false otherwise πŸ™ˆ
  • the ck_pr_dec_is_zero family of functions return true if the result of the decrement operation was 0, and false otherwise πŸ’…
so like: _zero writes its answer into z, and _is_zero hands its answer back to you as a bool. two different love languages, same truth 🫢

πŸ‘€ SEE ALSO πŸ‘€

the whole friend group, all of them, no one left out:

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


and that's the whole page, bestie πŸ¦‹ this one's from Concurrency Kit, filed under ck_pr_dec(3), and it's dated April 7, 2013 β€” go decrement something atomically, you absolute icon πŸ‘‘πŸ’–βœ¨

πŸ“¦ where this page comes from