Single Producer Single Consumer Lock Free Queue
A Single Producer Single Consumer Lock Free Queue (SPSC) is a lock free atomic ring buffer based queue.
API Reference
- group spsc_lockfree
- Single Producer Single Consumer (SPSC) Lockfree Queue API. - Defines - 
SPSC_INITIALIZER(sz, buf)
- Statically initialize an spsc. - Parameters:
- sz – Size of the spsc, must be power of 2 (ex: 2, 4, 8) 
- buf – Buffer pointer 
 
 
 - 
SPSC_DECLARE(name, type)
- Declare an anonymous struct type for an spsc. - Parameters:
- name – Name of the spsc symbol to be provided 
- type – Type stored in the spsc 
 
 
 - 
SPSC_DEFINE(name, type, sz)
- Define an spsc with a fixed size. - Parameters:
- name – Name of the spsc symbol to be provided 
- type – Type stored in the spsc 
- sz – Size of the spsc, must be power of 2 (ex: 2, 4, 8) 
 
 
 - 
spsc_size(spsc)
- Size of the SPSC queue. - Parameters:
- spsc – SPSC reference 
 
 
 - 
spsc_reset(spsc)
- Initialize/reset a spsc such that its empty. - Note that this is not safe to do while being used in a producer/consumer situation with multiple calling contexts (isrs/threads). - Parameters:
- spsc – SPSC to initialize/reset 
 
 
 - 
spsc_acquire(spsc)
- Acquire an element to produce from the SPSC. - Parameters:
- spsc – SPSC to acquire an element from for producing 
 
- Returns:
- A pointer to the acquired element or null if the spsc is full 
 
 - 
spsc_produce(spsc)
- Produce one previously acquired element to the SPSC. - This makes one element available to the consumer immediately - Parameters:
- spsc – SPSC to produce the previously acquired element or do nothing 
 
 
 - 
spsc_produce_all(spsc)
- Produce all previously acquired elements to the SPSC. - This makes all previous acquired elements available to the consumer immediately - Parameters:
- spsc – SPSC to produce all previously acquired elements or do nothing 
 
 
 - 
spsc_drop_all(spsc)
- Drop all previously acquired elements. - This makes all previous acquired elements available to be acquired again - Parameters:
- spsc – SPSC to drop all previously acquired elements or do nothing 
 
 
 - 
spsc_consume(spsc)
- Consume an element from the spsc. - Parameters:
- spsc – Spsc to consume from 
 
- Returns:
- Pointer to element or null if no consumable elements left 
 
 - 
spsc_release(spsc)
- Release a consumed element. - Parameters:
- spsc – SPSC to release consumed element or do nothing 
 
 
 - 
spsc_release_all(spsc)
- Release all consumed elements. - Parameters:
- spsc – SPSC to release consumed elements or do nothing 
 
 
 - 
spsc_acquirable(spsc)
- Count of acquirable in spsc. - Parameters:
- spsc – SPSC to get item count for 
 
 
 - 
spsc_consumable(spsc)
- Count of consumables in spsc. - Parameters:
- spsc – SPSC to get item count for 
 
 
 - 
spsc_peek(spsc)
- Peek at the first available item in queue. - Parameters:
- spsc – Spsc to peek into 
 
- Returns:
- Pointer to element or null if no consumable elements left 
 
 - 
spsc_next(spsc, item)
- Peek at the next item in the queue from a given one. - Parameters:
- spsc – SPSC to peek at 
- item – Pointer to an item in the queue 
 
- Returns:
- Pointer to element or null if none left 
 
 - 
spsc_prev(spsc, item)
- Get the previous item in the queue from a given one. - Parameters:
- spsc – SPSC to peek at 
- item – Pointer to an item in the queue 
 
- Returns:
- Pointer to element or null if none left 
 
 - 
struct spsc
- Common SPSC attributes. - Warning - Not to be manipulated without the macros! 
 
- 
SPSC_INITIALIZER(sz, buf)