私はここに、Memory ModelにBjarneのよくある質問を読んでいますが、C++ 11社の保証はそのような問題は、別々のメモリ位置」のために発生しないようにするために、引用なぜデータ競争がないのですか?
である 『』より正確には:メモリ位置が安全にアクセスすることはできません1つのワード内の異なるビットフィールドは別々のメモリ位置ではないので、何らかのロックなしでスレッド間でビットフィールドを持つ構造体を共有しないでください。 C++メモリモデルは単純に「誰もが期待している通り」である。
しかし、低レベルの並行性の問題については、まっすぐ考えるのは必ずしも容易ではない。検討:X == 0かつy == 0
と
開始する場合(X)、Y = 1。 //スレッド1
if(y)x = 1; //スレッド2
ここに問題がありますか?より正確には、データ競争はありますか? (いいえありません)。
私の質問は、なぜデータ競争ですか?スレッド1はy
のライターであり、スレッド2はy
のリーダーであり、同様にx
のリーダーであるため、明らかにデータ競合があることは明らかです。
(0,0)で始まるのはここのキーポイントです –