Grok 20.3.2
grk::ConcurrentQueue< T > Class Template Reference

Thread-safe unbounded queue with blocking pop and close signal. More...

#include <ConcurrentQueue.h>

Public Member Functions

 ConcurrentQueue ()=default
void push (T item)
bool pop (T &item)
void close ()
size_t size () const

Private Attributes

std::queue< T > queue_
bool closed_ = false
std::mutex mutex_
std::condition_variable cv_

Detailed Description

template<typename T>
class grk::ConcurrentQueue< T >

Thread-safe unbounded queue with blocking pop and close signal.

Producers push items without blocking (except briefly for the lock). Consumers block on pop() when the queue is empty. close() signals that no more items will be pushed; pop() returns false once the queue is both closed and empty.

Constructor & Destructor Documentation

◆ ConcurrentQueue()

template<typename T>
grk::ConcurrentQueue< T >::ConcurrentQueue ( )
default

Member Function Documentation

◆ close()

template<typename T>
void grk::ConcurrentQueue< T >::close ( )
inline

References closed_, cv_, and mutex_.

◆ pop()

template<typename T>
bool grk::ConcurrentQueue< T >::pop ( T & item)
inline

References closed_, cv_, mutex_, and queue_.

◆ push()

template<typename T>
void grk::ConcurrentQueue< T >::push ( T item)
inline

References cv_, mutex_, and queue_.

◆ size()

template<typename T>
size_t grk::ConcurrentQueue< T >::size ( ) const
inline

References mutex_, and queue_.

Member Data Documentation

◆ closed_

template<typename T>
bool grk::ConcurrentQueue< T >::closed_ = false
private

Referenced by close(), and pop().

◆ cv_

template<typename T>
std::condition_variable grk::ConcurrentQueue< T >::cv_
private

Referenced by close(), pop(), and push().

◆ mutex_

template<typename T>
std::mutex grk::ConcurrentQueue< T >::mutex_
mutableprivate

Referenced by close(), pop(), push(), and size().

◆ queue_

template<typename T>
std::queue<T> grk::ConcurrentQueue< T >::queue_
private

Referenced by pop(), push(), and size().


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