c – 使用xchg时我们需要mfence吗?

我有一套基于测试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.

上一篇:c-了解易失性asm与易失性变量


下一篇:c – 在gcc的内联汇编程序中出错[复制]