変数の「アグレッシブ」なメモリ整合性モデルを実装するCまたはC++コンパイラはありvolatile
ますか?「アグレッシブ」な整合性モデルとはvolatile
、生成されたコードのメモリバリアを伴う変数へのすべての書き込みを伴うことを意味します。
AFAIK、これはIA64(Itanium)プラットフォーム上のCまたはC++コンパイラの通常の動作です。x86はどうですか?volatile
x86プラットフォームで変数を処理するためのItaniumのようなアプローチを実装する(または実装するように構成できる)コンパイラはありますか?
編集:volatile
VS 2005が(コメントを読んだ後に)生成するコードを見ていますが、変数にアクセスするときに、あらゆる種類のメモリバリアに似たものは見当たりません。これは、MESIF(Intel)およびMOESI(AMD)キャッシュプロトコルにより、シングルCPUマルチコアx86プラットフォームでメモリの一貫性を確保するのにまったく問題ありません。
ただし、これはマルチCPUSMPx86プラットフォームでは不十分のようです。SMPプラットフォームでは、CPU間のメモリの一貫性を確保するために、生成されたコードにメモリバリアが必要になります。私は何が欠けていますか?変数に対して取得と解放のセマンティクスがすでにあるとMicrosoftが主張する場合、Microsoftは正確に何を意味しvolatile
ますか?