9#include <condition_variable>
19 explicit BoundedQueue(
size_t maxSize) : maxSize_(maxSize) {}
22 std::unique_lock lock(mutex_);
23 cvNotFull_.wait(lock, [&] {
return queue_.size() < maxSize_ || done_; });
26 queue_.push(std::move(item));
27 cvNotEmpty_.notify_one();
30 std::optional<T> pop() {
31 std::unique_lock lock(mutex_);
32 cvNotEmpty_.wait(lock, [&]{
return !queue_.empty() || done_; });
35 T item = std::move(queue_.front());
37 cvNotFull_.notify_one();
42 std::unique_lock lock(mutex_);
44 cvNotEmpty_.notify_all();
45 cvNotFull_.notify_all();
51 std::condition_variable cvNotEmpty_;
52 std::condition_variable cvNotFull_;