TBB concurrent_queue,unsafe_size有多安全?

时间:2012-03-28 08:41:49

标签: c++ tbb

文档不清楚concurrent_queue::unsafe_size()的不安全程度。

文件tbb/internal/concurrent_queue.h中的doxygen评论提及:

  

获取队列大小;如果修改队列,结果可能无效   同时

我感兴趣的是它会在过去的某个时刻返回有效大小,还是可能会返回垃圾? (假设有几个线程都在读写)。

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

1 个答案:

答案 0 :(得分:1)

你真的应该把它当作垃圾,因为它被标记为不安全。我认为它实际上可能会返回有问题的数字,因为如果内存服务它真的是推送和弹出之间的差异。然而,即使它是“安全的”,它仍然只会返回一个过去有效的数字,这是等待免费编程的乐趣之一。 如果你真的需要推理计数,那么在保存队列的类中存储一个原子计数。

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