【发布时间】:2016-03-26 08:52:31
【问题描述】:
我注意到 TBB concurrent_bounded_queue 阻塞 pop 没有超时。我们正在从另一个实现定时等待的实现转移到 TBB,因此在这里寻找相同的功能。
无论如何,定时等待通常很有用,任何建议都将不胜感激。
谢谢
【问题讨论】:
标签: c++ concurrency tbb
我注意到 TBB concurrent_bounded_queue 阻塞 pop 没有超时。我们正在从另一个实现定时等待的实现转移到 TBB,因此在这里寻找相同的功能。
无论如何,定时等待通常很有用,任何建议都将不胜感激。
谢谢
【问题讨论】:
标签: c++ concurrency tbb
According to Arch Robinson,TBB 的架构师,超时从来都不是优先事项:
TBB 的初始设计针对并行加速的基于任务的编程范式。这就是我认为的“经典”并行算法,例如 parallel_for、parallel_reduce 等。容器和互斥体的设计考虑了这一点;即,为了避免竞争条件。阻塞应该很短,否则程序将无法扩展。因此超时不是优先事项。
有一个old article,其中一位 TBB 工程师讨论了定时互斥锁。您可能无法直接使用那里勾画的解决方法,但它可以帮助您自己实现阻塞出队,基于concurrent_queue 不阻塞try_pop。
我不希望性能接近仅使用 TBB 队列的性能,而且不会那么微不足道(可能 100+ LOC),但如果你真的想要它,它可以做到。
附: Java BlockingQueue 风格的阻塞轮询/提供超时是您可能不想在快速路径上使用的东西。有几次我用这种方法开始了一个实现,只是在一段时间后发现(不是双关语),生产者/消费者的压力是不够的,只是阻塞至少同样有效,或者我需要调查发生了什么并重新考虑我的代码的某些部分。
【讨论】: