c++ - 使用 xchg 时需要 mfence 吗

标签 c++ c assembly x86 memory-fences

我有一套并测试基于 xchg 的程序集锁。我的问题是:

在使用xchg 指令时是否需要使用内存防护(mfencesfencelfence)?

编辑:

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/

相关文章:

c++ - 无法将 'this' 指针从 'const Bullet' 转换为 'Bullet &'

c++ - 从指针计算数组索引

c - 如何不以二进制格式 write()

c - 开关盒 assembly 级代码

从 C 调用汇编代码在多次调用后删除地址

c++ - 理解嵌套的 lambda 表达式

c++ - 默认 move 赋值调用析构函数,复制赋值不调用

c - 如何将 NULL 添加到 C 中的字符串数组

c - 如何在C中正确访问数组成员?

C++ WriteToProcessMemory() 意外结果