私は.Net 4.5を使用しています(プレビュー...この質問の目的上、4は問題ありません)。私はスレッド作業をしています。実行時にCPUアーキテクチャーに基づいて条件付きコードを使用できますか?
私の研究によると、x86 CPUは強力なメモリモデルを持っていることがわかっています。つまり、書き込みは並べ替えられません。これによりロック解除が安全になります。これは、メモリモデルが脆弱なItanium CPUでは当てはまりません。
私は、揮発性、メモリバリア、実行順序の原則を理解しています。
私が理想的に必要とするのは、の場合にはの場合はCPUがItaniumですが、x86の場合はメモリ障壁を挿入することです。 JITが処理する実行時コンパイラ指令を持つように、これを動的に行うことは可能ですか?
もしそうでなければ、2つのプラットフォーム用に別々のビルドが必要になることがわかります。その場合、2セットのC#ファイルを持たずにこれを行う最もエレガントな方法は何ですか?単にターゲットを変更するだけですか?
これらの相違点を非表示にするのはCLRの仕事です。 Itanium版では、ロックプリミティブの実装が非常に異なります。それを利用しないでください。 http://stackoverflow.com/questions/3855671/how-do-i-atomically-swap-2-ints-in-c/3855824#3855824 –
マシンをプログラムする場合は、C++に切り替えます。 –
@HansPassantはい、それはx86/x86-64ではなく、IA64上のロックリリースの前にメモリバリアが使用される必要性を否定しません。 – IamIC