c++ - TBB concurrent_queue,unsafe_size有多不安全?

标签 c++ tbb

关于 concurrent_queue::unsafe_size() 有多不安全,文档不是很清楚。

tbb/internal/concurrent_queue.h 文件中的 doxygen 注释提到:

Get size of queue; result may be invalid if queue is modified concurrently

我想知道的是它会在过去的某个时候返回有效大小,还是会返回垃圾? (前提是有几个线程都在读写)。

我对确切的值不感兴趣,但对“负载”指示更感兴趣。当消费者线程出现问题时,我想防止我的队列容量激增。我会使用 concurrent_bounded_queue,顾名思义它具有容量控制,但我会失去无锁属性。

最佳答案

您确实应该将其视为垃圾,因为它被标记为不安全。我认为它实际上可能会返回有问题的数字,因为如果内存起作用,它确实是推送和弹出之间的区别。然而,即使它是“安全的”,它仍然只会返回过去有效的数字,这是无等待编程的乐趣之一。 如果您真的需要对计数进行推理,请在保存队列的类中存储一个原子计数。

您是否有理由不使用 tbb 中的任务原语之一,而是构建自己的任务原语?

关于c++ - TBB concurrent_queue,unsafe_size有多不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903933/

相关文章:

c++ - 英特尔 TBB 与 CilkPlus

c++ - 加速 OpenCV

c++ - 使用 TBB 在并行循环结束时刷新线程本地缓冲区

opencv - TBB parallel_for,线程数更少

C++使用用户输入打开不同目录中的文件

c++ - 有人可以解释 char 的签名是如何特定于平台的吗?

c++ - 在 C++ 中重写 delete 应该如何表现?

c++ - 用于授予对类数据成员的访问权限的选项 (C++)

c++ - static_cast 和 Implicit_cast 有什么区别?

c++ - NUMA 架构上大 (8MB) 内存区域的可扩展分配