Skip to content

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>

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).

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.

size_t syn_spsc_queue_count (
    const SYN_SPSC_Queue * q
) 

Parameters:

  • q Queue 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:

  • q Pointer to queue control structure.
  • elem_buf Pointer to caller-provided backing memory buffer.
  • elem_size Size of each element in bytes (must be > 0).
  • capacity Number 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.

bool syn_spsc_queue_is_empty (
    const SYN_SPSC_Queue * q
) 

Parameters:

  • q Queue context.

Returns:

true if empty.


function syn_spsc_queue_is_full

Check if the queue is full.

bool syn_spsc_queue_is_full (
    const SYN_SPSC_Queue * q
) 

Parameters:

  • q Queue context.

Returns:

true if full.


function syn_spsc_queue_pop

Pop an item from the queue (Consumer only).

SYN_Status syn_spsc_queue_pop (
    SYN_SPSC_Queue * q,
    void * out_item
) 

Parameters:

  • q Queue context.
  • out_item Pointer 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).

SYN_Status syn_spsc_queue_push (
    SYN_SPSC_Queue * q,
    const void * item
) 

Parameters:

  • q Queue context.
  • item Pointer to item to copy into queue.

Returns:

SYN_OK on success, or SYN_BUSY if full.



The documentation for this class was generated from the following file src/syntropic/util/syn_spsc_queue.h