请参阅以下代码:
inline void OrderAccess::fence() {
if (os::is_MP()) {//judge if the os is muti processor.
// always use locked addl since mfence is sometimes expensive
#ifdef AMD64
__asm__ volatile ("lock; addl $0,0(%%rsp)" : : : "cc", "memory");
#else
__asm__ volatile ("lock; addl $0,0(%%esp)" : : : "cc", "memory");
#endif
}
}
代码如何提供' fence'?
的功能代码来自jdk8 / openjdk / hotspot / src / os_cpu / bsd_x86 / vm / orderAddress_bsd_x86.inline.hpp
再加上' cc' clobber是什么意思?
答案 0 :(得分:0)
第8.2.2章&#34; Intel Architectures Software Developer’s Manual的内存排序&#34; 表示锁定的指令具有总命令,不能使用锁定的指令重新排序读取或写入。< / p>
David Dice在his blog中解释了为什么选择LOCK ADD
而不是MFENCE
指令。
cc
(条件代码) clobber表示标志寄存器已被修改。