Boost:阻塞,直到队列有另一个项目

Boost: Block until queue has another item

本文关键字:队列 另一个 项目 阻塞 Boost      更新时间:2023-10-16

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

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

您希望执行一个有趣的操作:您希望对无锁定队列执行阻塞操作,这与无锁定队列的作用正好相反。

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

事实上,在许多情况下,您会为无锁支付性能惩罚,因为您保证队列不会持有任何锁,即使在最坏的情况下也是如此。

这个问题涵盖了这两种方法的许多优点和缺点。