【发布时间】:2012-08-24 09:08:14
【问题描述】:
据我了解,mfence 是硬件内存屏障,而asm volatile ("" : : : "memory") 是编译器屏障。但是,asm volatile ("" : : : "memory") 可以用来代替 mfence。
我困惑的原因是this link
【问题讨论】:
-
你要为什么 CPU 编译? x86/x64?
-
我同时使用 x86 和 x64。 x86 和 x64 机器的答案是否应该不同?
-
嗯,只有在内存排序较弱的架构上才需要内存屏障。 x86 和 x64 没有弱内存排序。在 x86/x64 上,所有存储都有一个释放栅栏,所有负载都有一个获取栅栏。所以,你应该只需要 asm volatile ("" : : : "memory")
-
“在 x86/x64 上,所有存储都有一个释放栅栏,所有加载都有一个获取栅栏”。你能指点我一些关于这个的相关文档吗?你也可以这样回答,我会接受,因为这会回答我的问题:)
标签: gcc x86 memory-barriers