单个生产者单个消费者队列,带有"阻塞"流行的

时间:2014-08-27 20:07:56

标签: c++ multithreading c++11

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

bool pop(T & ret);
Pops one object from ringbuffer.

此方法为“非阻塞”,如果没有数据则立即返回。 我希望这种方法“阻止”并等待一些数据到达。

我应该使用哪些藏品?

upd 至少有人会建议任何阻止pop的c ++队列吗?

1 个答案:

答案 0 :(得分:0)

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

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

bool blocking_pop(T & t) {
  while(!queue.empty())
    wait();
  return queue.pop(t);
}

英特尔TBB 拥有tbb::concurrent_bounded_queue,可能也符合您的需求。