MSDNによると:
volatile キーワードは、同時に実行されている複数のスレッドによってフィールドが変更される可能性があることを示します。volatile と宣言されたフィールドは、シングル スレッドによるアクセスを想定したコンパイラの最適化の対象ではありません。これにより、最新の値が常にフィールドに存在することが保証されます。
最後の文に注目してください:
これにより、最新の値が常にフィールドに存在することが保証されます。
しかし、このキーワードには問題があります。
命令の順序を変更できることを読みました:
First instruction Second instruction Can they be swapped? Read Read No Read Write No Write Write No Write Read Yes! <----
これは、John が volatile フィールドに値を設定し、後でPaul がそのフィールドを読み取りたいと考え、Paul が古い値を取得していることを意味します。
ここで何が起こっているのですか?それが本職じゃないの?
他の解決策があることは知っていますが、私の質問は volatile キーワードに関するものです。
私 (プログラマーとして) は、このキーワードの使用を避ける必要がありますか?