サイズ変更が必要ない限り、いくつかのセルを読み取り、STL ベクトルの異なるセルに同時に書き込むことが許可されていることを私は知っています。各スレッドが異なるキーにアクセス/挿入することを保証する場合、いくつかのキーの値を同時に取得し、同時に新しいキーと値のペアを Visual C++ 2010 の STL マップに挿入できるかどうか疑問に思っています。
http://www.cplusplus.com/reference/map/map/operator[]/ から:
データ競合:
コンテナーがアクセスされ、変更される可能性があります。この関数は要素にアクセスし、マップされた値を変更するために使用できる参照を返します。他の要素への同時アクセスは安全です。関数が新しい要素を挿入する場合、コンテナー内で範囲を同時に反復することは安全ではありません。
したがって、これは、新しい要素を挿入すると、コンテナーを反復処理できないことを示しています。問題は、別の要素にアクセスするためにコンテナーを反復処理する必要があるかどうかです。それは安全ですか?
コンテナーのサイズが N を超えないことを保証すれば安全でしょうか? 次に、ベクトルのサイズが変更されない限り、ベクトルの内部のように、マップの内部データ構造を事前に割り当てて一定のままにすることができます。
利用可能なマップのスレッドセーフな実装があることは知っていますが、おそらくはるかに遅いので、変更しているコードはアプリのホットスポットであるため、私の場合は標準マップで十分かどうか疑問に思っています。
ありがとう、ミハル