プログラミング言語C#とメモリモデルに関するMSDNマガジンの記事。C#におけるvolatileキーワードの意味論と、各種アーキテクチャ(x86-x64/Itanium/ARM)への実装マッピングについて言及されている。
- 日本語訳:http://msdn.microsoft.com/ja-jp/magazine/jj863136.aspx, 第2部
- 原文:http://msdn.microsoft.com/en-us/magazine/jj863136.aspx, Part 2
メモ:“ループ読み取りのホイスト(Loop Read Hoisting)” はコンパイラによるループ処理最適化の一種。ループ中では不変と判断される変数値について、ループ処理前へ移動(引き上げ; hoist)してRead回数を削減する最適化技法。*1
メモ:“読み取りの省略(Read Elimination)” にて「ただし、バージョン4までの.NET Frameworkではこのケースが適切に処理されないことを指摘しておかなければなりません。実際、_Aフィールドをvolatileとマークしても読み取り順序の入れ替えは避けられません。この問題は、.NET Frameworkバージョン4.5で解決されました。」との言及あり。.NET Framework 4以前にはJava 1.4以前と同種の問題*2があった?どちらかというと仕様ではなく実装の問題のように読める。
関連URL