0

Concurrency::concurrent_vector があり、まだ存在しない場合にのみ新しい要素をスレッドセーフにプッシュバックしたい (そのため、最初に検索を実行する必要があります)。どうすればこれを達成できますか? イテレータアクセス(書き込み、同じ要素の読み取り)でスレッドセーフであり、上記で書いたものも許可する並行コレクションが必要です。

質問の絞り込み: ほとんどが同時に検索される場合、使用するのに最適なコンテナーは何でしょうか。要素が見つからない場合 (よりまれ)、insert/push_back が必要になり、検索要素が見つかった場合 (ほとんどの場合) は要素に更新されます。が必要です(同じ反復子の同時更新)

VS2010 で既に利用可能なものから、concurrent_vector を見ましたが、同じ要素を更新するのは安全ではなく、要素が見つからない場合に備えて追加のロックが必要であり、そのために要素を追加する必要があるようです。どう思いますか ?外部ロック (コンテナ全体のロック) を排除するために使用できるものはありますか?

4

1 に答える 1

0

説明されているケースでは、(Visual Studio から) 同時イテレーション、イテレータ アクセス (同じ要素値への更新/読み取りが同期されている限り!) を保証するハッシュ ベースのコンテナである、concurrent_unordered_map コンテナを使用するのがおそらく最善です。 push_back-s、キー (演算子 []) に基づく要素アクセス。

コンテナーの実装は、コンカレンシー ランタイム サンプル パックの一部として利用できます。 キーによるルックアップが必要ない場合は、他の同時実行コンテナーを使用することもできます: http://msdn.microsoft.com/en-us/library/dd504906.aspx

于 2011-11-14T21:06:05.253 に答える