gpt4 book ai didi

c++ - 为什么 concurrent_queue 是非阻塞的?

转载 作者:IT老高 更新时间:2023-10-28 22:24:36 27 4
gpt4 key购买 nike

在VS2010引入的并发运行时,有一个concurrent_queue类。它有一个非阻塞的 try_pop() 函数。
与英特尔线程构建模块 (TBB) 类似,从 2.1 版升级到 2.2 版时,阻塞的 pop() 调用已被删除。

我想知道阻塞调用有什么问题。为什么从 TBB 中删除?还有为什么没有阻塞concurrent_queue?

我处于需要阻塞并发队列的情况,并且我不想忙于等待。除了自己写队列,并发运行时是否还有其他可能?

最佳答案

来自 a comment from Arch Robison , 并没有更多 "horse's mouth"比那个(a):


PPL 的 concurrent_queue 没有阻塞弹出,因此 tbb::strict_ppl::concurrent_queue 也没有。阻塞弹出在 tbb::concurrent_bounded_queue 中可用。

省略阻塞弹出的设计论据是,在许多情况下,阻塞的同步是在队列外部提供的,在这种情况下,在队列内部实现阻塞就变成了不必要的开销。

另一方面,旧的 tbb::concurrent_queue 的阻塞弹出在没有外部同步的用户中很受欢迎。

所以我们拆分了功能。不需要阻塞或有界的用例可以使用新的 tbb::concurrent_queue,而确实需要它的用例可以使用 tbb::concurrent_bounded_queue


(a) Arch 是 Threading Building Blocks 的架构师。

关于c++ - 为什么 concurrent_queue 是非阻塞的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3924829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com