我注意到TBB concurrent_bounded_queue阻塞弹出没有超时。我们正在从另一个我们有时间等待的实现转向TBB,因此在这里寻找相同的功能。
在任何情况下,定时等待通常都很有用,任何建议都将受到赞赏。
由于
答案 0 :(得分:0)
According to Arch Robinson,超时永远不是优先事项:
TBB的初始设计针对并行加速的基于任务的编程范式。这就是我所说的“经典”并行算法,如parallel_for,parallel_reduce等。容器和互斥体的设计考虑到了这一点;即,为了避免竞争条件。预计阻塞很短,否则程序将无法扩展。因此超时不是优先事项。
有一个old article,其中一位TBB工程师讨论了定时的互斥锁。您可能无法直接使用在那里勾画的变通方法,但它可以帮助您实现阻止自行出列,并在concurrent_queue
未阻止try_pop
的基础上启用。
我不希望性能接近于仅使用TBB队列,并且它不会那么微不足道(可能是100+ LOC),但如果你真的想要它,它就可以完成。 / p>
P.S。 Java BlockingQueue
- 具有超时的样式阻止轮询/提议是您可能不希望在快速路径上使用的东西。有几次我用这种方法开始实现,只是在一段时间后发现(没有双关语),生产者/消费者压力不够,只是阻塞至少同样有效,或者我需要调查发生了什么,并重新考虑我的代码的一些部分。