CK_RING_ENQUEUE_SPMC_SIZE(3)
π CK_RING_ENQUEUE_SPMC_SIZE β the manual, but make it cute π
okay bestie, welcome to the ck_ring_enqueue_spmc_size page from the Concurrency Kit manual. it lives in libck, and you link it with -lck. this is the one that yeets a pointer into a bounded FIFO and tells you how big the buffer got. main character behaviour fr fr πΈ
β¨ NAME β¨
ck_ring_enqueue_spmc_size β enqueue pointer into bounded FIFO and return size of buffer π
π LIBRARY π
Concurrency Kit (libck, -lck) π«Ά
β¨ SYNOPSIS β¨
#include <ck_ring.h>
bool
ck_ring_enqueue_spmc_size(ck_ring_t *ring, ck_ring_buffer_t *buffer,
void *entry, unsigned int *length);
like. look at that signature. she's gorgeous. π
π DESCRIPTION π
so the ck_ring_enqueue_spmc(3) function enqueues the pointer entry into the bounded buffer that ring points at, FIFO style β first in, first out, no cutting the line, we're not animals π
now, the buffer that buffer points to has to be unique to ring, and it must point to an array of ck_ring_buffer_t of a sufficient length (based on the power-of-2 elements in the buffer). the whole reason the ring and the buffer are decoupled like that is to handle use-cases involving multiple address spaces and DMA, among others. iconic design choice, honestly. π§
lowkey important: if you're on non-POSIX platforms, or you just want strict compliance with C, it's recommended that you pass a pointer of type void ** for entry.
this function is safe to call without locking for UINT_MAX concurrent invocations of ck_ring_dequeue_spmc(3) or ck_ring_trydequeue_spmc(3). and it provides wait-free progress guarantees for one active invocation. no cap. π
π EXAMPLE π
#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;
unsigned int length;
/* Attempt to enqueue pointer to some_object into buffer. */
if (ck_ring_enqueue_spmc_size(&ring, &buffer, &entry, &length) == false) {
/*
* The buffer was full and the enqueue operation
* has failed.
*/
return;
}
/*
* If entry was the 101st or greater pointer in the buffer,
* do something.
*/
if (length > 100) {
do_something;
}
return;
}
see how she eats? that's the whole vibe. π«Ά
π RETURN VALUES π
- returns
trueif the value of entry was successfully enqueued into ring β¨ - returns
falseif the value of entry could not be enqueued β and that only happens when ring was full π - the number of entries in the buffer, as of the exact point in time that entry is enqueued, gets stored in the integer that length points at π
π SEE ALSO π
ck_ring_init(3)ck_ring_dequeue_spmc(3)ck_ring_trydequeue_spmc(3)ck_ring_enqueue_spmc(3)ck_ring_dequeue_spsc(3)ck_ring_enqueue_spsc(3)ck_ring_enqueue_spsc_size(3)ck_ring_capacity(3)ck_ring_size(3)
additional information is available at http://concurrencykit.org/ π
and that's the page, bestie!! π this was the CK_RING_ENQUEUE_SPMC_SIZE(3) manual, dated April 20, 2013 β yeah she's an old queen and she still slays π go forth and enqueue responsibly, mwah πβ¨π
π¦ 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