Skip to content

File syn_spsc_queue.c

FileList > src > syntropic > util > syn_spsc_queue.c

Go to the source code of this file

Lock-free Single-Producer Single-Consumer (SPSC) queue implementation.

  • #include "syn_spsc_queue.h"
  • #include "../common/syn_barrier.h"
  • #include <string.h>

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

Public Static Functions

Type Name
size_t spsc_advance (size_t idx, size_t capacity)

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.


Public Static Functions Documentation

function spsc_advance

static inline size_t spsc_advance (
    size_t idx,
    size_t capacity
) 


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