我正在寻找具有“阻塞”弹出窗口的单一制作人单一消费者队列。 除了一种方法外,提升spsc_queue几乎没问题:
bool pop(T & ret);
Pops one object from ringbuffer.
此方法为“非阻塞”,如果没有数据则立即返回。 我希望这种方法“阻止”并等待一些数据到达。
我应该使用哪些藏品?
upd 至少有人会建议任何阻止pop的c ++队列吗?
答案 0 :(得分:0)
并发队列很少提供弹出阻塞接口:在许多情况下,用户应该执行阻塞逻辑,从而避免不必要的队列实现开销。
也就是说,您可以在queue::pop
周围添加一个包装器来执行以下操作:
bool blocking_pop(T & t) {
while(!queue.empty())
wait();
return queue.pop(t);
}
英特尔TBB 拥有tbb::concurrent_bounded_queue
,可能也符合您的需求。