提升:阻塞直到队列有另一个项目

Boost: Block until queue has another item

我正在使用 Boost 的无锁队列作为生产者-消费者队列。我希望每个消费者线程在队列为空时阻塞,在队列中有更多数据或任何生产者终止时醒来。但是 Boost 似乎没有提供阻塞 pop,只有立即返回 pop.

消费者应该如何等待数据可用?

您想要执行一个有趣的操作:您想要在无锁队列上执行阻塞操作,这与您拥有无锁队列的目的有点相反。

使用使用互斥锁和条件变量的普通阻塞队列。这很简单,而且是更标准的方法。

在很多情况下,您实际上为无锁支付了性能损失,因为您要保证队列不持有任何锁,即使在最坏的情况下也是如此。

This question 涵盖了这两种方法的许多优缺点。