我在32位Windows上用C++编写了一个低锁列表。我在使用关键部分方面取得了很大的进步,但我希望有人能理智地检查我所做的是否正确,并且我所做的没有任何错误:#ifndef__LOW_LOCK_STACK_H_#define__LOW_LOCK_STACK_H_templateclassLowLockStack{protected:structEntry{Entry*pNext;T*pData;};unionHeader{__int64m_XChg;struct{Entry*m_pNext;__int16m_Depth;__int16m_Counter;};};Headerm_Hea
我有一套并测试基于xchg的程序集锁。我的问题是:在使用xchg指令时是否需要使用内存防护(mfence、sfence或lfence)?编辑:64位平台:使用Intelnehalem 最佳答案 如其他答案所述,锁前缀在这里是隐式的,因此在汇编程序级别上没有问题。当您将其用作内联汇编程序时,问题可能出在C(或C++)级别。在这里,您必须确保编译器不会对您的xchg的指令重新排序。如果您使用的是gcc(或同类),您通常会执行以下操作:__asm____volatile__("xchgl%1,%0":"=r"(ret):"m"(*poin
在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内访问