を反復処理しているときにstd::map
、たとえば別のスレッドで要素をマップに追加すると、その中のオブジェクトが削除されて反復処理が破損する可能性はありますか? (イテレータは移動時に存在しない変数を指すため)
質問する
178 次
3 に答える
3
理論的には、要素を に追加するとstd::map
、そのマップ内のすべての反復子が有効なままになるはずです。しかし問題は、操作がアトミックでないことです。OS が操作の途中で挿入スレッドを一時停止し、反復スレッドに制御を戻すと、 の状態std::map
が無効になる可能性があります。
ミューテックスなどを介してマップへのアクセスを同期する必要があります。または、 TBBまたは別の同様のライブラリからの同時実行に適したコレクションを使用することもできます。TBB は と を提供concurrent_unordered_map
しconcurrent_hash_map
ます。
于 2013-10-16T15:30:41.753 に答える