- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在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/
我的并发系统中存在内存损坏问题。 我有一个不是线程安全的内存分配器,我正试图通过按需向各种线程提供多个实例来使其成为线程安全的。此代码显示了我正在使用的系统。它有效地构建了一个实例队列。如果队列为空,
关于 concurrent_queue::unsafe_size() 有多不安全,文档不是很清楚。 tbb/internal/concurrent_queue.h 文件中的 doxygen 注释提到:
英特尔线程构建模块库包括一个concurrent_queue 容器。 不幸的是,在互联网上四处挖掘还没有找到 TBB 库以并行方式使用 concurrent_queue 的示例。 有人可以提供一个队列
在VS2010引入的并发运行时,有一个concurrent_queue类。它有一个非阻塞的 try_pop() 函数。 与英特尔线程构建模块 (TBB) 类似,从 2.1 版升级到 2.2 版时,阻塞
我正在尝试在共享内存中设置一个队列,以便进程 P1、P2 等可以将消息推送到同一个队列,这些消息将由另一个进程 C1 使用。 我使用了 boost::interprocess::managed_sha
我是英特尔 TBB 的新手。我正在使用 concurrent_queue 以在我的项目中实现细粒度的并行性。我几乎没有怀疑。这就是我正在实现的方式。 thread_fun(arguments)
我正在寻找 concurrent_queue 的等价物来自英特尔的 tbb Rust 中的模块。我找到了一些 crate : multiqueue two-lock-queue crossbeam-d
我正在使用 std::deque at 函数来访问元素而不从队列中弹出,因为我在不同的迭代中使用相同的队列。我的解决方案基于粗粒度多线程。现在我想让它成为细粒度的多线程解决方案。为此,我正在使用 tb
我做了一个测试来比较 golang channel 和 C++ tbb 并发队列性能,我设置了 8 个写入器和 1 个读取器,它们在不同的线程中。结果显示 golang 比 C++ 版本快得多(无论延
我是一名优秀的程序员,十分优秀!