Multi-Producer Multi-Consumer Queue
include/structures/mpmc_queue.h View source View on GitHubStructs
Section titled “Structs”mpmc_slot
Section titled “mpmc_slot”struct mpmc_slot {
_Atomic uint64_t seq;
uintptr_t data;
}; mpmc_queue
Section titled “mpmc_queue”struct mpmc_queue {
size_t capacity;
size_t mask;
_Atomic uint64_t head;
_Atomic uint64_t tail;
struct mpmc_slot *slots;
}; Functions
Section titled “Functions”mpmc_queue_init
Section titled “mpmc_queue_init”bool mpmc_queue_init(struct mpmc_queue *q, size_t capacity); mpmc_queue_init_static
Section titled “mpmc_queue_init_static”void mpmc_queue_init_static(struct mpmc_queue *q, struct mpmc_slot *slots, size_t capacity); mpmc_queue_destroy
Section titled “mpmc_queue_destroy”void mpmc_queue_destroy(struct mpmc_queue *q); mpmc_queue_enqueue
Section titled “mpmc_queue_enqueue”bool mpmc_queue_enqueue(struct mpmc_queue *q, void *ptr); mpmc_queue_enqueue_uintptr
Section titled “mpmc_queue_enqueue_uintptr”bool mpmc_queue_enqueue_uintptr(struct mpmc_queue *q, uintptr_t val); mpmc_queue_dequeue
Section titled “mpmc_queue_dequeue”bool mpmc_queue_dequeue(struct mpmc_queue *q, void **out_ptr); mpmc_queue_dequeue_uintptr
Section titled “mpmc_queue_dequeue_uintptr”bool mpmc_queue_dequeue_uintptr(struct mpmc_queue *q, uintptr_t *out_val); mpmc_queue_empty
Section titled “mpmc_queue_empty”bool mpmc_queue_empty(const struct mpmc_queue *q); mpmc_queue_capacity
Section titled “mpmc_queue_capacity”size_t mpmc_queue_capacity(const struct mpmc_queue *q); Macros
Section titled “Macros”MPMC_QUEUE_INIT
Section titled “MPMC_QUEUE_INIT”#define MPMC_QUEUE_INIT \
(struct mpmc_queue) { \
.capacity = 0, .mask = 0, .head = 0, .tail = 0, .slots = NULL \
}