C++TBB concurrent_bounded_queue-弹出超时

C++ TBB concurrent_bounded_queue - pop timeout

本文关键字:超时 bounded concurrent C++TBB queue-      更新时间:2023-10-16

我注意到TBB concurrent_bounded_queue阻塞弹出没有超时。我们正在从另一个实现转移到TBB,在那里我们进行了定时等待,因此在这里寻找相同的功能。

在任何情况下,定时等待通常都是有用的,任何建议都将受到赞赏。

感谢

根据TBB的架构师Arch Robinson的说法,超时从来都不是优先事项:

TBB的最初设计针对的是用于并行加速的基于任务的编程范式。这就是我认为的"经典"并行算法,如parallel_fo、parallel_reduce等。容器和互斥对象的设计就是考虑到了这一点;即避免比赛条件。预计封锁时间会很短,否则该项目将无法扩大规模。因此,超时不是优先事项。

有一篇老文章,其中一位TBB工程师讨论了定时互斥。您可能无法直接使用那里绘制的解决方法,但它可以帮助您自己实现阻塞出列,基于concurrent_queue的非阻塞try_pop

我不希望它的性能接近于只使用TBB队列,而且它不会那么琐碎(可能是100+LOC),但如果你真的想要它,它是可以做到的。

p.S.Java BlockingQueue风格的带超时的阻塞轮询/提供是您可能不想在快速通道上使用的东西。有几次,我用这样的方法开始了一个实现,但一段时间后(并非双关语),我发现生产者/消费者的压力是不够的,仅仅阻止至少同样有效,或者我需要调查发生了什么,并重新思考我的代码的某个部分。