【问题标题】:Concurrent mutable priority queue并发可变优先级队列
【发布时间】:2012-08-23 13:44:37
【问题描述】:

是否有并发的可变优先级队列?理想情况下,我正在寻找 C++ 实现,但对于初学者来说,指向算法的指针会很有帮助。

明确地说,我正在寻找一个可以调整元素优先级的优先级队列。特别是,TBB 的concurrent_priority_queue 没有提供必要的功能。 (就此而言,STL 的priority_queue 也没有,即使我们忽略了并发性。)Boost.Heap 库提供了我想要的串行功能,但没有并发性。自然,我正在寻找比在每个操作上锁定整个队列更细粒度的东西。

【问题讨论】:

  • 我怀疑任何这样的队列要么需要一个粗粒度锁,要么需要很多细粒度锁,而且效率都不会太高。但是可能有另一种方法可以解决您的问题。你的用例是什么?
  • 是的.. 我看不出任何可靠的方式来做这样的事情。 futex/criticalSection 锁这么重要吗?从树中的一个位置删除指针并将其插入到其他位置不会花费那么长时间(或者将指针从一个集合移动到另一个集合,或者在您的优先级列表实现中需要做的任何事情)?
  • 好吧,我真的希望有一个无锁的数据结构。至于更新,它们涉及到通常的数据结构:您不仅要将指针从一个地方移动到另一个地方,而且您必须重新平衡一棵树,或执行类似的操作。
  • @JanHudec,就我的用例而言,我有几个优先级队列正在同时处理并且(希望)大部分是独立处理的。但有时删除一个中的内容需要更新另一个中的优先级。

标签: c++ algorithm data-structures concurrency priority-queue


【解决方案1】:

并发优先级队列通常使用跳过列表实现,因此 Facebook 的 ConcurrentSkipList 可能符合您的要求。

【讨论】:

  • 很好的建议。非常感谢您的指点。我只希望他们有这个课程的文档页面。
猜你喜欢
  • 1970-01-01
  • 2011-04-30
  • 2011-12-20
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
相关资源
最近更新 更多