2012-08-23 7 views
11

同時変更可能な優先度キューはありますか?理想的には、私はC++実装を探していますが、まずはアルゴリズムへのポインタが非常に役に立ちます。同時変更可能な優先度キュー

明らかに、私は要素の優先度を調整できる優先度キューを探しています。特に、TBBのconcurrent_priority_queueは必要な機能を提供していません。 (その意味では、STLのpriority_queueは並行処理を無視してもどちらもしません)Boost.Heapライブラリは、必要なシリアル機能を提供しますが、並行処理はありません。もちろん、すべての操作でキュー全体をロックするだけではなく、細かい作業を探しています。

+0

私は、このようなキューが粗いロックを必要とするか、または非常に多くのきめ細かなロックを必要とし、どちらも効率的ではないと考えます。しかし、あなたの問題に対する別のアプローチがあるかもしれません。あなたのユースケースは何ですか? –

+0

ええと。私はそのようなことを確実に行う方法をすばやく見ることはできません。 futex/criticalSectionのロックはそれほど大したことはありませんか?ツリー内のある場所からポインタを削除し、別の場所に挿入したり、あるコレクションから別のコレクションにポインタを移動したり、優先リスト実装で何が必要なのか、それほど長くはかかりません。 –

+0

まあ、私は本当にロックフリーのデータ構造を望んでいました。更新に関しては、通常のデータ構造でかなり複雑です。ポインタをある場所から別の場所に移動するだけでなく、ツリーのバランスを変更するか、同様の操作を行う必要があります。 – foxcub

答えて

9

並行優先度キューは、スキップリストを使用して実装されることが多いため、FacebookのConcurrentSkipListが要件に合っている可能性があります。

+0

優れた提案。ポインタありがとうございました。私は彼らがこのクラスのドキュメンテーションページを持っていればいいと思います。 – foxcub