2011-11-11 19 views
0

私はConcurrency :: concurrent_vectorを持っています。まだ存在しない場合に備えて、新しい要素をスレッドセーフでプッシュバックしたいと思っています。どうすればこれを達成できますか? イテレータへのアクセス(書き込み、同じ要素の読み込み)時にスレッドセーフであり、上記で書いたことを許可する同時コレクションが必要です。Microsoft PPLライブラリ:concurrent_vector push_backデータ一度だけ

質問リファイン: 要素が(もっとレア)見つからない場合、それは主に、同時に検索なら何を使用するのに最適なコンテナになり、インサート/一backが必要とされるであろうとする場合には、検索要素が発見された(ほとんどの場合が同じイテレータの(同時更新を必要とされる要素への)更新)

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

答えて

0

おそらく、(Visual Studioから)concurrent_unordered_mapコンテナは、並行反復、イテレータアクセスを保証するハッシュベースのコンテナです(同じ要素値への更新/読み取りが同期!)、push_back-s、キーに基づく要素アクセス(演算子[]) http://msdn.microsoft.com/en-us/library/dd504906.aspx

:また、他のコンカレント・コンテナーを使用することができない必要なものであるキーによって、ケースのルックアップで Concurrency Runtime Sample Pack の一環として

コンテナの実装が可能です