2

同じ要素の読み取りと書き込みを同時に行わないという条件で、安全な同時読み取りおよび書き込みアクセスを提供する、ある種の連想コンテナを探しています。

基本的に私はこの設定をしています:

スレッド1: Aを作成し、Aをコンテナーに書き込み、ネットワーク経由でAを送信します。

スレッド2: Aへの応答を受信し、コンテナーからAを読み取り、いくつかの処理を実行します。

シリアルに処理されるAに対して複数の応答を受け取る可能性がありますが、Aを1回だけ書き込むことを保証できます。これはまた、Aへの応答を送信した後にのみ受信できるため、Aの読み取りと書き込みを同時に行わないことを保証します。

つまり、基本的に、要素への書き込みが他の要素と混同しないコンテナを探しています。たとえば、std::map(または他のツリーベースの実装)は、基礎となる実装が赤黒木であるため、この条件を満たしていません。そのため、特定の書き込みによってツリーのバランスが再調整され、同時読み取り操作が失敗する可能性があります。

通常のハッシュテーブルの実装が私の基準を満たすという私の仮定に基づいて、これでうまくいくと思いますがstd::hash_mapboost::unordered_set私は肯定的ではなく、私に教えてくれるドキュメントを見つけることができません。他の誰かがこれらを同様に使用しようとしましたか?

4

2 に答える 2

1

C ++標準ではスレッドについてまったく言及されていないため、STLはスレッドに関する確固たる保証を提供しません。ブーストについてはわかりませんが、そのコンテナーが並行性を保証しているとしたら驚きます。

TBBconcurrent_hash_mapからはどうですか?私はこの関連するSOの質問でこれを見つけました。

于 2010-03-01T17:04:35.427 に答える
0

一般的なハッシュテーブルの実装では、格納されている要素の数が増えると再ハッシュが行われるため、これが発生しないことがわかっている場合を除いて、これはおそらくオプションではありません。

関数型言語に使用される構造(たとえば、http: //www.cs.cmu.edu/~rwh/theses/okasaki.pdfを参照)を調べますが、現在考えている構造はガベージコレクションに依存していることに注意してください。 。

于 2010-03-01T16:36:38.763 に答える