我正在寻找一个带有“阻塞”pop功能的单生产者单消费者队列。 Boost spsc_queue 几乎完美,除了其中一种方法:
bool pop(T & ret);
Pops one object from ringbuffer.
这个方法是“非阻塞”的,如果没有数据,则立即返回。
我希望这个方法是“阻塞的”,等待直到有数据到达。
我应该使用哪些集合?
更新:至少有人能推荐一个具有阻塞弹出功能的c++队列吗?
我正在寻找一个带有“阻塞”pop功能的单生产者单消费者队列。 Boost spsc_queue 几乎完美,除了其中一种方法:
bool pop(T & ret);
Pops one object from ringbuffer.
这个方法是“非阻塞”的,如果没有数据,则立即返回。
我希望这个方法是“阻塞的”,等待直到有数据到达。
我应该使用哪些集合?
更新:至少有人能推荐一个具有阻塞弹出功能的c++队列吗?
并发队列很少提供弹出阻塞接口:在许多情况下,用户应该执行阻塞逻辑,以避免队列实现的不必要开销。
也就是说,您可以在queue::pop
周围添加一个包装器来执行以下操作:
bool blocking_pop(T & t) {
while(!queue.empty())
wait();
return queue.pop(t);
}
Intel TBB拥有tbb::concurrent_bounded_queue
,这也可能适合您的需求。
tbb:concurrent_bounded_queue
。这是一个并发有界队列的参考文档。 - quantdevtbb:concurrent_bounded_queue
是多生产者、多消费者队列。我需要一个生产者和一个消费者的队列,这样可以简化事情吗?可能可以使用更简单的实现方式吗? - Oleg Vazhnev