【问题标题】:C++ TBB concurrent_bounded_queue - pop timeoutC++ TBB concurrent_bounded_queue - 弹出超时
【发布时间】:2016-03-26 08:52:31
【问题描述】:

我注意到 TBB concurrent_bounded_queue 阻塞 pop 没有超时。我们正在从另一个实现定时等待的实现转移到 TBB,因此在这里寻找相同的功能。

无论如何,定时等待通常很有用,任何建议都将不胜感激。

谢谢

【问题讨论】:

    标签: c++ concurrency tbb


    【解决方案1】:

    According to Arch Robinson,TBB 的架构师,超时从来都不是优先事项:

    TBB 的初始设计针对并行加速的基于任务的编程范式。这就是我认为的“经典”并行算法,例如 parallel_for、parallel_reduce 等。容器和互斥体的设计考虑了这一点;即,为了避免竞争条件。阻塞应该很短,否则程序将无法扩展。因此超时不是优先事项。

    有一个old article,其中一位 TBB 工程师讨论了定时互斥锁。您可能无法直接使用那里勾画的解决方法,但它可以帮助您自己实现阻塞出队,基于concurrent_queue 不阻塞try_pop

    我不希望性能接近仅使用 TBB 队列的性能,而且不会那么微不足道(可能 100+ LOC),但如果你真的想要它,它可以做到。

    附: Java BlockingQueue 风格的阻塞轮询/提供超时是您可能不想在快速路径上使用的东西。有几次我用这种方法开始了一个实现,只是在一段时间后发现(不是双关语),生产者/消费者的压力是不够的,只是阻塞至少同样有效,或者我需要调查发生了什么并重新考虑我的代码的某些部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      相关资源
      最近更新 更多