変更が同時にThread1変更されるかどうかを気にしない場合、論理エラー以外に心配することはありますか? 次の場合、クラッシュなどの原因になりますか?Flag1Thread2Flag1
Thread1同時にThread2読みFlag1ますか?Thread1読みFlag1ながら同時に書き込んでいますか?Thread2Flag1
これらの例でFlag1は、 はboolです。
変更が同時にThread1変更されるかどうかを気にしない場合、論理エラー以外に心配することはありますか? 次の場合、クラッシュなどの原因になりますか?Flag1Thread2Flag1
Thread1同時にThread2読みFlag1ますか?Thread1読みFlag1ながら同時に書き込んでいますか?Thread2Flag1これらの例でFlag1は、 はboolです。
C++11 メモリ モデルの規則によると、次のようになります。
データ競合は未定義の動作です。正常なハードウェアでクラッシュする可能性は低いですが、未定義の動作であるため、何かが起こる可能性があります。
私の知る限り、2 つのスレッドがまったく同時に同じメモリにアクセスすることはできません。
並列計算でも、これらの仮定はプロセッサによって自動的に処理されます。 http://en.wikipedia.org/wiki/Parallel_Random_Access_Machine
したがって、答えはノークラッシュです。もちろん、論理エラーが発生しますが、気にしないので:p.
フラグは としてマークする必要がありますvolatile。これにより、コンパイラが一貫性のない方法で読み取り/書き込みを最適化することがなくなります。
bool への読み取り/書き込みはアトミックであると信じています。したがって、アクセスの順序を気にしなければ、他の問題は発生しないと思います。