文档不清楚concurrent_queue::unsafe_size()
的不安全程度。
文件tbb/internal/concurrent_queue.h
中的doxygen评论提及:
获取队列大小;如果修改队列,结果可能无效 同时
我感兴趣的是它会在过去的某个时刻返回有效大小,还是可能会返回垃圾? (假设有几个线程都在读写)。
我对确切的值不感兴趣,但对“负载”指示更感兴趣。当消费者线程出现问题时,我想阻止我的队列在容量中爆炸。我会使用concurrent_bounded_queue
,顾名思义就是容量控制,但我会失去无锁属性。
答案 0 :(得分:1)
你真的应该把它当作垃圾,因为它被标记为不安全。我认为它实际上可能会返回有问题的数字,因为如果内存服务它真的是推送和弹出之间的差异。然而,即使它是“安全的”,它仍然只会返回一个过去有效的数字,这是等待免费编程的乐趣之一。 如果你真的需要推理计数,那么在保存队列的类中存储一个原子计数。
您是否有理由不使用tbb中的任务原语而不是自己构建?