14 #include <condition_variable> 27 : max_items_(max_items)
32 void enqueue(T &&item)
35 std::unique_lock<std::mutex> lock(queue_mutex_);
36 pop_cv_.wait(lock, [
this] {
return this->q_.size() < this->max_items_; });
37 q_.push(std::move(item));
39 push_cv_.notify_one();
43 bool enqueue_nowait(T &&item)
46 std::unique_lock<std::mutex> lock(queue_mutex_);
47 if (q_.size() == this->max_items_)
51 q_.push(std::forward<T>(item));
53 push_cv_.notify_one();
59 bool dequeue_for(T &popped_item, std::chrono::milliseconds wait_duration)
62 std::unique_lock<std::mutex> lock(queue_mutex_);
63 if (!push_cv_.wait_for(lock, wait_duration, [
this] { return this->q_.size() > 0; }))
68 popped_item = std::move(q_.front());
77 std::mutex queue_mutex_;
78 std::condition_variable push_cv_;
79 std::condition_variable pop_cv_;
Definition: async_logger.h:26
Definition: mpmc_blocking_q.h:22