レースコンディションと同時書き込みに関する質問があります。レースコンディションとアンロック書き込み
私はオブジェクトの異なるスレッドからアクセスされるクラスを持っています。私は、必要に応じていくつかの値を計算し、結果をキャッシュしたいと思います。パフォーマンス上の理由から、私はむしろロックを使用しないでください(誰かが尋ねる前に - はい、それは私の場合に関連しています)。
これは競合状態を構成します。ただし、オブジェクトはconstであり、変更されません。したがって、異なるスレッドがキャッシュされる値を計算すると、それらは同じであることが保証された私の使用例になります。ロックしないでこれらの値を書き込むことは安全でしょうか?あるいは、広い意味で、ロックすることなく、異なるスレッドから同じ内容をメモリに書き込むことは安全ですか?
書き込まれる値は、bool型とdouble型です。問題のアーキテクチャーはx86とARMです。
EDIT:誰でも入力できるようにしてください。私は最後にキャッシングを伴わない方法を見つけることに決めました。このアプローチは、「ハック」に似ているように見えますが、フラグ変数の使用に問題があります。
私はC++がそれを保証しているとは思っていませんが、少なくとも現代的なハードウェアでは、どのように問題が発生するかを想像するのは難しいです。 –
プリミティブへの各書き込み操作はアトミックなので、多くのスレッドが同じフィールドセットに同時に書き込みを行っている場合は違いはありません。 – Alain
"異なるスレッドがキャッシュされる値を計算すると、使用例が同一であることが保証されます。"これは変です。書き込まれた値が同一であることを保証できる場合は、なぜそれらを同時に書きますか?それ以上は、なぜそれらを複数回書くか? –