在c ++中是否有一个等待的队列?

som*_*lse 3 c++ concurrency multithreading task ppl

我用concurrency::taskppltasks.h巨资我的代码库.

我想找到一个等待的队列,我可以在那里做" co_await my_queue.pop()".有人实施过吗?

详细信息:我有一个生产者线程将元素推送到队列,另一个接收器线程将等待并在元素到达队列时唤醒.此接收线程可能会等待/唤醒以同时处理其他任务(使用pplpp :: when_any).

我不想要一个带有接口的队列,我必须轮询一个try_pop方法,因为它很慢,我不想要一个blocking_pop方法,因为这意味着我不能同时处理其他准备好的任务.

Com*_*sMS 5

这基本上是您的标准线程安全队列实现,但是condition_variable您将不得不使用futures来协调不同的线程.然后你就可以co_await在未来的回归中pop做好准备.

队列的实现需要保留与未完成的pop调用相对应的promise的列表.如果队列在结束时仍然满员pop,您可以立即返回准备好的未来.您可以使用plain old std::mutex来同步对底层数据结构的并发访问.

我不知道有任何实现已经做到这一点,但它不应该太难实现.请注意,管理所有期货会带来一些额外的开销,因此您的队列可能会比condition_variable基于经典的方法效率略低.