我正在将Boost的lockfree队列用于生产者 - 消费者队列。我希望每个消费者线程在队列为空时阻塞,当队列中有更多数据或任何生产者终止时唤醒。但Boost似乎没有提供阻止pop
,只是立即返回pop
。
消费者如何等待数据可用?
答案 0 :(得分:2)
您正在寻找一个有趣的操作:您正在寻找在无锁队列上执行阻塞操作,这与您拥有无锁队列的情况相反。
使用互斥锁和条件变量使用普通阻塞队列。它很简单,也是一种更标准的方法。
在许多情况下,你实际上为lockfree支付了性能损失,因为即使在最糟糕的情况下,你仍然保证队列不会有任何锁定。
This question涵盖了两种方法的许多优点和缺点。