草庐IT

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

我有一套并测试基于xchg的程序集锁。我的问题是:在使用xchg指令时是否需要使用内存防护(mfence、sfence或lfence)?编辑:64位平台:使用Intelnehalem 最佳答案 如其他答案所述,锁前缀在这里是隐式的,因此在汇编程序级别上没有问题。当您将其用作内联汇编程序时,问题可能出在C(或C++)级别。在这里,您必须确保编译器不会对您的xchg的指令重新排序。如果您使用的是gcc(或同类),您通常会执行以下操作:__asm____volatile__("xchgl%1,%0":"=r"(ret):"m"(*poin

windows - 为什么可以将 MemoryBarrier 实现为对 xchg 的调用?

在msdn上http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208(v=vs.85).aspx,MemoryBarrier实现为对xchg的调用。//x86FORCEINLINEVOIDMemoryBarrier(VOID){LONGBarrier;__asm{xchgBarrier,eax}}我在“软件开发人员手册”中找不到一些资料。请告诉我原因。 最佳答案 这里发生了两件事:编译器被赋予一个不透明block以插入到输出指令流中。由于它不知道block内访问