Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
corium::MpscRingBuffer< T, Capacity > Class Template Reference

Lock-free Multiple-Producer, Single-Consumer (MPSC) RingBuffer. Implements Dmitry Vyukov's algorithm with zero heap allocations (uses std::array). Cache-line aligned (alignas(CORIUM_CACHE_LINE_SIZE)) to eliminate false sharing. More...

#include <MpscRingBuffer.hpp>

+ Inheritance diagram for corium::MpscRingBuffer< T, Capacity >:
+ Collaboration diagram for corium::MpscRingBuffer< T, Capacity >:

Classes

struct  PushResult
 

Public Member Functions

bool empty () const noexcept
 Check if the queue is empty (approximate if concurrent producers are active).
 
 MpscRingBuffer ()
 
 MpscRingBuffer (const MpscRingBuffer &)=delete
 
 MpscRingBuffer (MpscRingBuffer &&)=delete
 
MpscRingBufferoperator= (const MpscRingBuffer &)=delete
 
MpscRingBufferoperator= (MpscRingBuffer &&)=delete
 
bool tryPop (T &result)
 Pop an item from the queue (Single-Consumer only).
 
template<typename... Args>
PushResult tryPush (Args &&... args)
 Push an item into the queue (Multi-Producer thread safe).
 
 ~MpscRingBuffer ()
 

Static Public Member Functions

static constexpr std::size_t capacity () noexcept
 Return fixed capacity of this ring buffer.
 

Detailed Description

template<typename T, std::size_t Capacity>
class corium::MpscRingBuffer< T, Capacity >

Lock-free Multiple-Producer, Single-Consumer (MPSC) RingBuffer. Implements Dmitry Vyukov's algorithm with zero heap allocations (uses std::array). Cache-line aligned (alignas(CORIUM_CACHE_LINE_SIZE)) to eliminate false sharing.

Template Parameters
TEvent element type stored in ring cells.
CapacityBuffer capacity (must be a power of 2).

Constructor & Destructor Documentation

◆ MpscRingBuffer() [1/3]

template<typename T , std::size_t Capacity>
corium::MpscRingBuffer< T, Capacity >::MpscRingBuffer ( )
inline

◆ ~MpscRingBuffer()

template<typename T , std::size_t Capacity>
corium::MpscRingBuffer< T, Capacity >::~MpscRingBuffer ( )
inline

◆ MpscRingBuffer() [2/3]

template<typename T , std::size_t Capacity>
corium::MpscRingBuffer< T, Capacity >::MpscRingBuffer ( const MpscRingBuffer< T, Capacity > &  )
delete

◆ MpscRingBuffer() [3/3]

template<typename T , std::size_t Capacity>
corium::MpscRingBuffer< T, Capacity >::MpscRingBuffer ( MpscRingBuffer< T, Capacity > &&  )
delete

Member Function Documentation

◆ capacity()

template<typename T , std::size_t Capacity>
static constexpr std::size_t corium::MpscRingBuffer< T, Capacity >::capacity ( )
inlinestaticconstexprnoexcept

Return fixed capacity of this ring buffer.

◆ empty()

template<typename T , std::size_t Capacity>
bool corium::MpscRingBuffer< T, Capacity >::empty ( ) const
inlinenoexcept

Check if the queue is empty (approximate if concurrent producers are active).

◆ operator=() [1/2]

template<typename T , std::size_t Capacity>
MpscRingBuffer & corium::MpscRingBuffer< T, Capacity >::operator= ( const MpscRingBuffer< T, Capacity > &  )
delete

◆ operator=() [2/2]

template<typename T , std::size_t Capacity>
MpscRingBuffer & corium::MpscRingBuffer< T, Capacity >::operator= ( MpscRingBuffer< T, Capacity > &&  )
delete

◆ tryPop()

template<typename T , std::size_t Capacity>
bool corium::MpscRingBuffer< T, Capacity >::tryPop ( T &  result)
inline

Pop an item from the queue (Single-Consumer only).

Returns
true if an item was successfully popped; false if empty.
+ Here is the caller graph for this function:

◆ tryPush()

template<typename T , std::size_t Capacity>
template<typename... Args>
PushResult corium::MpscRingBuffer< T, Capacity >::tryPush ( Args &&...  args)
inline

Push an item into the queue (Multi-Producer thread safe).

Returns
PushResult indicating success and whether queue was empty before push.
+ Here is the caller graph for this function:

The documentation for this class was generated from the following file: