2#include <condition_variable>
9 template <
typename T,
typename Container = std::deque<T>>
34 std::lock_guard lock(
mux_);
40 std::lock_guard lock(
mux_);
45 void push(
const T& value) {
47 std::lock_guard lock(
mux_);
56 std::lock_guard lock(
mux_);
57 queue_.push(std::move(value));
63 template <
typename... Args>
66 std::lock_guard lock(
mux_);
67 queue_.emplace(std::forward<Args>(args)...);
75 std::lock_guard lock(
mux_);
85 std::lock_guard lock(
mux_);
89 std::optional<T> value = std::move(
queue_.front());
98 std::unique_lock lock(
mux_);
101 T value = std::move(
queue_.front());
T waitPop()
Waits until the queue is not empty, then pops and returns the first element.
std::optional< T > tryFront() const
Tries to get a copy of the first element without removing it.
ConcurrentQueue & operator=(const ConcurrentQueue &)=delete
ConcurrentQueue(const allocator_type &allocator)
Constructs a concurrent FIFO queue.
std::optional< T > tryPop()
Tries to pop and return the first element.
ConcurrentQueue()=default
Constructs a concurrent FIFO queue.
void emplace(Args &&... args)
Constructs a new element in place at the end of the queue.
typename Container::allocator_type allocator_type
ConcurrentQueue(ConcurrentQueue &&)=delete
ConcurrentQueue & operator=(ConcurrentQueue &&)=delete
ConcurrentQueue(const ConcurrentQueue &)=delete
std::queue< T, Container > queue_
void push(T &&value)
Pushes a new element into the queue.
std::size_t size() const
Returns the number of elements in the queue. Value can be obsolete in concurrency code.
std::condition_variable blocked_
void push(const T &value)
Pushes a new element into the queue.
bool empty() const
Checks if the queue is empty. Value can be obsolete in concurrency code.