Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
MPMCQueue< T > Class Template Reference

Multiple Producer Multiple Consumer lock-free queue. More...

#include <src/utils/mpmc_queue.h>

Public Member Functions

 MPMCQueue (size_t buffer_size=8)
 
size_t capacity () const
 
void reserve (size_t buffer_size)
 
void clear ()
 
bool push_back (T const &data)
 
bool pop_front (T &data)
 

Static Public Member Functions

static size_t power_of_two_size (size_t sz)
 

Detailed Description

template<typename T>
class MPMCQueue< T >

Multiple Producer Multiple Consumer lock-free queue.

See https://gist.github.com/x42/9aa5e737a1479bafb7f1bb96f7c64dc0

This is taken from Ardour.

Inspired by http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue Kudos to Dmitry Vyukov who licensed that code in terms of a 2-clause BSD license.

TODO: maybe replace with https://github.com/erez-strauss/lockfree_mpmc_queue or https://github.com/rigtorp/MPMCQueue/blob ?

Definition at line 66 of file mpmc_queue.h.

Constructor & Destructor Documentation

◆ MPMCQueue()

template<typename T>
MPMCQueue< T >::MPMCQueue ( size_t buffer_size = 8)
inline

Definition at line 69 of file mpmc_queue.h.

◆ ~MPMCQueue()

template<typename T>
MPMCQueue< T >::~MPMCQueue ( )
inline

Definition at line 71 of file mpmc_queue.h.

Member Function Documentation

◆ capacity()

template<typename T>
size_t MPMCQueue< T >::capacity ( ) const
inline

Definition at line 73 of file mpmc_queue.h.

◆ clear()

template<typename T>
void MPMCQueue< T >::clear ( )
inline

Definition at line 97 of file mpmc_queue.h.

◆ pop_front()

template<typename T>
bool MPMCQueue< T >::pop_front ( T & data)
inline

Definition at line 141 of file mpmc_queue.h.

◆ power_of_two_size()

template<typename T>
static size_t MPMCQueue< T >::power_of_two_size ( size_t sz)
inlinestatic

Definition at line 75 of file mpmc_queue.h.

◆ push_back()

template<typename T>
bool MPMCQueue< T >::push_back ( T const & data)
inline

Definition at line 107 of file mpmc_queue.h.

◆ reserve()

template<typename T>
void MPMCQueue< T >::reserve ( size_t buffer_size)
inline

Definition at line 83 of file mpmc_queue.h.


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