是否有任何 C 或 C++ 编译器为volatile
变量实现“积极的”内存一致性模型?通过“积极的”一致性模型,我的意思是volatile
在生成的代码中伴随所有对具有内存屏障的变量的写入。
AFAIK,这是 IA64 (Itanium) 平台上 C 或 C++ 编译器的习惯行为。x86呢?是否有一个编译器可以实现(或可以配置为实现)类似 Itanium 的方法来处理volatile
x86 平台上的变量?
编辑:我正在查看 VS 2005 生成的代码(在阅读了评论之后),并且在访问volatile
变量时我看不到任何类似于任何类型的内存屏障的东西。由于 MESIF (Intel) 和 MOESI (AMD) 缓存协议,这非常适合确保单 CPU 多核 x86 平台上的内存一致性。
但是,这在多 CPU SMP x86 平台上似乎是不够的。SMP 平台在生成的代码中需要内存屏障,以确保 CPU 之间的内存一致性。我错过了什么?当微软声称他们已经在volatile
变量上具有获取-释放语义时,究竟是什么意思?