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

时间:2015-04-12 05:20:52

标签: c++ multithreading boost producer-consumer

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

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

1 个答案:

答案 0 :(得分:2)

您正在寻找一个有趣的操作:您正在寻找在无锁队列上执行阻塞操作,这与您拥有无锁队列的情况相反。

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

在许多情况下,你实际上为lockfree支付了性能损失,因为即使在最糟糕的情况下,你仍然保证队列不会有任何锁定。

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