2016-08-26 2 views
1

私はstd::vector<int>の長さが4であり、一定であるとします。次に、スレッドiはインデックスiだけを読み書きする4つのスレッドがあります。これはスレッドセーフですか?単一の要素を互いに独立して変更することはできますか?私は彼らがおそらく一度にキャッシュラインにロードされるように、彼らが近くにいるので不思議です。スレッドが独立したインデックス範囲を読み書きする場合、std :: vector threadsafeは安全ですか?

スレッドごとのインデックス範囲が1より大きい場合は違いがありますか?

編集:

私はVisual Studio 2010、したがってC++ 03を使用しています。 C++ 03からC++ 11までの違いに関するヒントは大歓迎です!

+0

実際には、ご使用のプラットフォームとコンパイラでは、これが機能します。 C++ 11は*保証されています*動作します。 –

+0

これはうまくいくはずですが、誤った共有のために小さな範囲では不十分かもしれません。 –

答えて

2

はい、問題ありません。異なるスレッドは、さまざまな要素の範囲で操作できます。

23.2.2コンテナデータ競合[container.requirements.dataraces]

かかわらず(17.6.5.9)、実装が必要とされる:C++11標準に従って

ベクトル<bool>を除き、同じシーケンス内の異なる要素に含まれるオブジェクトの内容が同時に変更された場合のデータ競合を避けるためです。

編集:仕様は、それらのないアカウントを取っていないし、何の保証もなされていないので、C++11前に同時実行やデータレースは、言及されることはありません。

関連する問題