volatile
変数の "積極的な"メモリ一貫性モデルを実装するCまたはC++コンパイラがありますか? 「積極的」整合性モデルとは、生成されたコードにメモリ障壁を持つ変数volatile
へのすべての書き込みを伴うことを意味します。"積極的な"揮発性セマンティクスを持つCおよびC++コンパイラ
AFAIKこれは、IA64(Itanium)プラットフォーム上のCまたはC++コンパイラでの通常の動作です。 x86についてはどうですか? x86プラットフォームでvolatile
の変数を処理するためのItaniumのようなアプローチを実装する(または実装するように設定できる)コンパイラはありますか?
編集:私は(コメントを読んだ後)を生成VS 2005のコードを見ていると私はvolatile
変数にアクセスするときに、メモリバリアの任意の並べ替えのようになり何も表示されません。これは、MESIF(Intel)およびMOESI(AMD)キャッシュプロトコルのために、単一CPUマルチコアx86プラットフォームでメモリの一貫性を確保するのにまったく問題ありません。
しかし、これはマルチCPU SMP x86プラットフォームでは不十分と思われます。 SMPプラットフォームでは、CPU間のメモリの一貫性を保証するために、生成されたコードにメモリ障壁が必要です。私は何が欠けていますか? volatile
変数の取得リリースのセマンティクスが既に存在すると主張すると、マイクロソフトは正確に何を意味しますか?
[Raymond Chenによる](https://blogs.msdn.com/b/oldnewthing/archive/2011/04/19/10155452.aspx?Redirected=true)VS2005以降でこの現象が発生する – Praetorian
@ Prætorian:[公式文書によると](http://msdn.microsoft.com/en-us/library/12a04hfd.aspx)も参照してください。 ; - ] – ildjarn
@AndreyT:VC++ 2005またはVC++ 2005 SP1をテストしていますか? IIRC、VC++ 2005 RTMには、volatileと期待されたセマンティクスがなく、SP1とVC++ 2008+で修正されたバグがありました。 – ildjarn