具有“阻塞”pop 的单生产者单消费者队列

jav*_*red 5 c++ multithreading c++11

我正在寻找具有“阻塞”弹出功能的单生产者单消费者队列。除了一种方法外,提升spsc_queue几乎没问题:

bool pop(T & ret);
Pops one object from ringbuffer.
Run Code Online (Sandbox Code Playgroud)

这个方法是“非阻塞的”,如果没有数据就立即返回。我希望这个方法“阻塞”并等待一些数据到达。

我应该使用哪些集合?

upd至少有人可以建议任何带有阻塞流行音乐的 C++ 队列吗?

qua*_*dev 0

并发队列很少提供弹出阻塞接口:在许多情况下,用户需要执行阻塞逻辑,以避免队列实现不必要的开销。

也就是说,您可以在您的周围添加一个包装器queue::pop来执行以下操作:

bool blocking_pop(T & t) {
  while(!queue.empty())
    wait();
  return queue.pop(t);
}
Run Code Online (Sandbox Code Playgroud)

英特尔 TBBtbb::concurrent_bounded_queue,这可能也适合您的需求。