CK_RING_ENQUEUE_SPSC(3)
β¨ CK_RING_ENQUEUE_SPSC(3) β¨
okay bestie, welcome to the CK_RING_ENQUEUE_SPSC(3) page π this is the Concurrency Kit girlies' guide to yeeting a pointer into a bounded FIFO, and honestly? it's giving main character energy. let's get into it π«Ά
πΈ NAME πΈ
ck_ring_enqueue_spsc β enqueue pointer into bounded FIFO π
π LIBRARY π
Concurrency Kit (that's libck, and you link it with -lck, iykyk) π
π¦ SYNOPSIS π¦
#include <ck_ring.h>
bool
ck_ring_enqueue_spsc(ck_ring_t *ring, ck_ring_buffer_t *buffer,
void *entry);
β¨ DESCRIPTION β¨
so like, the ck_ring_enqueue_spsc(3) function enqueues the pointer entry into the bounded buffer pointed to by ring, and it does it in FIFO fashion β first in, first out, no cutting the line bestie π
the buffer pointed to by buffer must be unique to ring and must point to an array of ck_ring_buffer_t of sufficient length (that length is according to the power-of-2 elements in the buffer). no cap, that part is important π
the whole decoupling-the-ring-from-the-buffer situation? it's not just for the aesthetic β¨ it serves to address use-cases involving multiple address spaces and DMA, among others. iconic design choice, honestly.
if you're on non-POSIX platforms, or you just wish for strict compliance with C, then it is recommended that you pass a pointer of type void ** for entry. π
this function is safe to call without locking for up to one concurrent invocation of ck_ring_dequeue_spsc(3). and the best part? this function provides wait-free progress guarantees π§ periodt.
π EXAMPLE π
here's the vibe, copy it exactly bestie:
#include <ck_ring.h>
/* This ring was previously initialized with ck_ring_init. */
ck_ring_t ring;
/* The ring was initialized for 1023 elements. */
ck_ring_buffer_t buffer[1024];
void
enqueue(void)
{
void *entry = some_object;
/* Attempt to enqueue pointer to some_object into buffer. */
if (ck_ring_enqueue_spsc(&ring, &buffer, &entry) == false) {
/*
* The buffer was full and the enqueue operation
* has failed.
*/
return;
}
/* Enqueue operation completed successfully. */
return;
}
π₯ RETURN VALUES π₯
- the function returns
trueif the value ofentrywas successfully enqueued intoring. slay π - the function returns
falseif the value ofentrycould not be enqueued β and that only happens ifringwas full. so if you got afalse, your ring was packed, no room, sorry babe π
π SEE ALSO π
ck_ring_init(3)ck_ring_dequeue_spmc(3)ck_ring_trydequeue_spmc(3)ck_ring_enqueue_spmc(3)ck_ring_enqueue_spmc_size(3)ck_ring_dequeue_spsc(3)ck_ring_enqueue_spsc_size(3)ck_ring_capacity(3)ck_ring_size(3)
additional information is available at http://concurrencykit.org/ β go read it, bestie, it's worth it π
okay that's the whole page!! π this was CK_RING_ENQUEUE_SPSC(3) from Concurrency Kit, dated April 20, 2013 β literally a classic, an icon, a legend, and she still ate π
β¨ bye bestie, go enqueue something π¦
π¦ 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 2012-2013 Samy Al Bahra
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms