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