Libosmium  2.20.0
Fast and flexible C++ library for working with OpenStreetMap data
Public Member Functions | Private Attributes | List of all members
osmium::thread::Queue< T > Class Template Reference

#include <queue.hpp>

Public Member Functions

 Queue (std::size_t max_size=0, std::string name="")
 
 Queue (const Queue &)=delete
 
Queueoperator= (const Queue &)=delete
 
 Queue (Queue &&)=delete
 
Queueoperator= (Queue &&)=delete
 
 ~Queue ()=default
 
void push (T value)
 
void wait_and_pop (T &value)
 
bool try_pop (T &value)
 
bool empty () const
 
std::size_t size () const
 
bool in_use () const noexcept
 
void shutdown ()
 

Private Attributes

const std::size_t m_max_size
 
const std::string m_name
 Name of this queue (for debugging only). More...
 
std::mutex m_mutex
 
std::queue< T > m_queue
 
std::condition_variable m_data_available
 Used to signal consumers when data is available in the queue. More...
 
std::condition_variable m_space_available
 Used to signal producers when queue is not full. More...
 
std::atomic< bool > m_in_use {true}
 

Detailed Description

template<typename T>
class osmium::thread::Queue< T >

A thread-safe queue.

Constructor & Destructor Documentation

◆ Queue() [1/3]

template<typename T >
osmium::thread::Queue< T >::Queue ( std::size_t  max_size = 0,
std::string  name = "" 
)
inlineexplicit

Construct a multithreaded queue.

Parameters
max_sizeMaximum number of elements in the queue. Set to 0 for an unlimited size.
nameOptional name for this queue. (Used for debugging.)

◆ Queue() [2/3]

template<typename T >
osmium::thread::Queue< T >::Queue ( const Queue< T > &  )
delete

◆ Queue() [3/3]

template<typename T >
osmium::thread::Queue< T >::Queue ( Queue< T > &&  )
delete

◆ ~Queue()

template<typename T >
osmium::thread::Queue< T >::~Queue ( )
default

Member Function Documentation

◆ empty()

template<typename T >
bool osmium::thread::Queue< T >::empty ( ) const
inline

◆ in_use()

template<typename T >
bool osmium::thread::Queue< T >::in_use ( ) const
inlinenoexcept

◆ operator=() [1/2]

template<typename T >
Queue & osmium::thread::Queue< T >::operator= ( const Queue< T > &  )
delete

◆ operator=() [2/2]

template<typename T >
Queue & osmium::thread::Queue< T >::operator= ( Queue< T > &&  )
delete

◆ push()

template<typename T >
void osmium::thread::Queue< T >::push ( value)
inline

Push an element onto the queue. If the queue has a max size, this call will block if the queue is full.

◆ shutdown()

template<typename T >
void osmium::thread::Queue< T >::shutdown ( )
inline

◆ size()

template<typename T >
std::size_t osmium::thread::Queue< T >::size ( ) const
inline

◆ try_pop()

template<typename T >
bool osmium::thread::Queue< T >::try_pop ( T &  value)
inline

◆ wait_and_pop()

template<typename T >
void osmium::thread::Queue< T >::wait_and_pop ( T &  value)
inline

Member Data Documentation

◆ m_data_available

template<typename T >
std::condition_variable osmium::thread::Queue< T >::m_data_available
private

Used to signal consumers when data is available in the queue.

◆ m_in_use

template<typename T >
std::atomic<bool> osmium::thread::Queue< T >::m_in_use {true}
private

◆ m_max_size

template<typename T >
const std::size_t osmium::thread::Queue< T >::m_max_size
private

Maximum size of this queue. If the queue is full pushing to the queue will block.

◆ m_mutex

template<typename T >
std::mutex osmium::thread::Queue< T >::m_mutex
mutableprivate

◆ m_name

template<typename T >
const std::string osmium::thread::Queue< T >::m_name
private

Name of this queue (for debugging only).

◆ m_queue

template<typename T >
std::queue<T> osmium::thread::Queue< T >::m_queue
private

◆ m_space_available

template<typename T >
std::condition_variable osmium::thread::Queue< T >::m_space_available
private

Used to signal producers when queue is not full.


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