我有一套基于测试xchg的装配锁.我的问题是:
使用xchg指令时是否需要使用内存防护(mfence,sfence或lfence)?
编辑:
64位平台:采用Intel nehalem
解决方法:
如其他答案中所述,锁定前缀是隐含的,这里,因此在汇编程序级别上没有问题.当您将其用作内联汇编程序时,问题可能在于C(或C)级别.在这里,您必须确保编译器不会重新排序与xchg相关的指令.如果您使用gcc(或表兄弟),您通常会执行以下操作:
__asm__ __volatile__("xchgl %1, %0"
: "=r"(ret)
: "m"(*point), "0"(ret)
: "memory");
这是将指令声明为volatile并添加“memory”clobber.