我有一套并测试基于 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 并添加“内存”破坏器。
关于c++ - 使用 xchg 时需要 mfence 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027590/