File syn_spsc_queue.h¶
FileList > src > syntropic > util > syn_spsc_queue.h
Go to the source code of this file
Lock-free Single-Producer Single-Consumer (SPSC) queue. More...
#include "../common/syn_defs.h"#include <stdbool.h>#include <stddef.h>#include <stdint.h>#include "../pt/syn_pt.h"
Classes¶
| Type | Name |
|---|---|
| struct | SYN_SPSC_Queue SPSC Queue Control Structure. |
Public Functions¶
| Type | Name |
|---|---|
| size_t | syn_spsc_queue_count (const SYN_SPSC_Queue * q) Get current number of items stored in queue. |
| SYN_Status | syn_spsc_queue_init (SYN_SPSC_Queue * q, void * elem_buf, size_t elem_size, size_t capacity) Initialize a Lock-Free SPSC Queue. |
| bool | syn_spsc_queue_is_empty (const SYN_SPSC_Queue * q) Check if the queue is empty. |
| bool | syn_spsc_queue_is_full (const SYN_SPSC_Queue * q) Check if the queue is full. |
| SYN_Status | syn_spsc_queue_pop (SYN_SPSC_Queue * q, void * out_item) Pop an item from the queue (Consumer only). |
| SYN_Status | syn_spsc_queue_push (SYN_SPSC_Queue * q, const void * item) Push an item into the queue (Producer only). |
Macros¶
| Type | Name |
|---|---|
| define | PT_BLOCK_QUEUE_POP (pt, task, q) [**PT\_BLOCK\_CONDITION**](syn__pt_8h.md#define-pt_block_condition)(pt, task, (q))Block task execution (SYN_TASK_BLOCKED) until SPSC queue is not empty. |
| define | PT_QUEUE_WAIT_POP (pt, q) [**PT\_WAIT\_UNTIL**](syn__pt_8h.md#define-pt_wait_until)(pt, (q))Wait until SPSC queue is not empty (polling). |
Detailed Description¶
Provides a lock-free, zero-allocation SPSC item queue designed for high-performance ISR-to-Task, Task-to-Task, or Inter-Core (multicore) message passing without spinlocks or disabling interrupts.
Public Functions Documentation¶
function syn_spsc_queue_count¶
Get current number of items stored in queue.
Parameters:
qQueue context.
Returns:
Count of items in queue.
function syn_spsc_queue_init¶
Initialize a Lock-Free SPSC Queue.
SYN_Status syn_spsc_queue_init (
SYN_SPSC_Queue * q,
void * elem_buf,
size_t elem_size,
size_t capacity
)
Parameters:
qPointer to queue control structure.elem_bufPointer to caller-provided backing memory buffer.elem_sizeSize of each element in bytes (must be > 0).capacityNumber of elements buffer can hold (must be > 0).
Returns:
SYN_OK on success.
function syn_spsc_queue_is_empty¶
Check if the queue is empty.
Parameters:
qQueue context.
Returns:
true if empty.
function syn_spsc_queue_is_full¶
Check if the queue is full.
Parameters:
qQueue context.
Returns:
true if full.
function syn_spsc_queue_pop¶
Pop an item from the queue (Consumer only).
Parameters:
qQueue context.out_itemPointer to memory receiving popped item.
Returns:
SYN_OK on success, or SYN_ERROR if empty.
function syn_spsc_queue_push¶
Push an item into the queue (Producer only).
Parameters:
qQueue context.itemPointer to item to copy into queue.
Returns:
SYN_OK on success, or SYN_BUSY if full.
Macro Definition Documentation¶
define PT_BLOCK_QUEUE_POP¶
Block task execution (SYN_TASK_BLOCKED) until SPSC queue is not empty.
#define PT_BLOCK_QUEUE_POP (
pt,
task,
q
) `PT_BLOCK_CONDITION (pt, task, ! syn_spsc_queue_is_empty (q))`
define PT_QUEUE_WAIT_POP¶
Wait until SPSC queue is not empty (polling).
The documentation for this class was generated from the following file src/syntropic/util/syn_spsc_queue.h