41#include <condition_variable>
50template<
typename T,
size_t max_size = unlimited_size>
53 mutable std::mutex mutex{};
58 queue.push(std::move(
item));
63 T
pop(
bool nonblocking =
false)
65 std::unique_lock<std::mutex>
lock{mutex};
66 if (queue.size() == 0 && nonblocking) {
71 T result = std::move(queue.front());
87 template<
typename Rep,
typename Period>
88 T
timed_pop(std::chrono::duration<Rep, Period> timeout){
89 std::unique_lock<std::mutex>
lock{mutex};
95 T result = std::move(queue.front());
104 std::unique_lock
lock{mutex};
106 if (queue.size() >= max_size) {
107 result = std::move(queue.front());
115 std::unique_lock
lock{mutex};
116 if (queue.size() >= max_size) {
124 std::unique_lock
lock{mutex};
T pop(bool nonblocking=false)
T timed_pop(std::chrono::duration< Rep, Period > timeout)
void push_and_unlock(std::unique_lock< std::mutex > &lock, T &&item)
std::condition_variable queue_incremented_cv
std::condition_variable queue_decremented_cv
constexpr size_t unlimited_size