1

を反復処理しているときにstd::map、たとえば別のスレッドで要素をマップに追加すると、その中のオブジェクトが削除されて反復処理が破損する可能性はありますか? (イテレータは移動時に存在しない変数を指すため)

4

3 に答える 3

3

理論的には、要素を に追加するとstd::map、そのマップ内のすべての反復子が有効なままになるはずです。しかし問題は、操作がアトミックでないことです。OS が操作の途中で挿入スレッドを一時停止し、反復スレッドに制御を戻すと、 の状態std::mapが無効になる可能性があります。

ミューテックスなどを介してマップへのアクセスを同期する必要があります。または、 TBBまたは別の同様のライブラリからの同時実行に適したコレクションを使用することもできます。TBB は と を提供concurrent_unordered_mapconcurrent_hash_mapます。

于 2013-10-16T15:30:41.753 に答える