次のコード:
while (x == 1) { ... }
に最適化される可能性があります
while (true) { ... }
ifx
は別のスレッドでのみ割り当てられます。C# での volatile キーワードの使用例の説明を参照してください。そこでの答えは、に設定x
することでこれを解決しますvolatile
。
しかし、これら 3 人の貢献者によると、それは正しい方法ではないようです (合計で 100 万人以上の評判があります :))。
Hans Passant volatile 使用の再現可能な例 : 「マルチスレッド シナリオで有用であると想定しないでください。」
Marc Gravell volatile 変数の値はマルチスレッドで変化しません: 「volatile は、動作を保証するために通常使用するセマンティックではありません」
Eric Lippert 原子性、揮発性、および不変性は異なります。パート 3 : 「揮発性フィールドを作成することはお勧めしません。」
Backgroundworker
aが他のマルチスレッドと同じように扱われると仮定すると(最適化を防止するメカニズムが組み込まれているのではなく)、最適化の悪さをどのように防ぐことができますか?