2009-12-17 50 views

回答

1

This page详细说明了“原生”互锁函数的内在性。它提到了以下限制

因为_InterlockedCompareExchange64使用CMPXCHG8B指令,它不适用于奔腾预处理器,如486

因此,我们可以预期,它是可用,也实现为互锁指令操作(而不是通过使用完全锁定进行模拟)。

1

是的,它的工作原理与32位一样。这就是Interlocked方法。

0

是的,它的工作原理。

它使用InterlockedCompareExchange64 - 如果你想看看在x86 asm中可能的实现,看看这里 - http://qc.embarcadero.com/wc/qcmain.aspx?d=6212

asm 
//  ->   EAX  Destination 
//     ESP+4 Exchange  
//     ESP+12 Comperand 
//  <-   EDX:EAX Result  
      PUSH EBX 
      PUSH EDI 

      MOV  EDI, EAX 

      MOV  EAX, DWORD PTR [Comperand] 
      MOV  EDX, DWORD PTR [Comperand+4] 

      MOV  EBX, DWORD PTR [Exchange] 
      MOV  ECX, DWORD PTR [Exchange+4] 

LOCK  CMPXCHG8B [EDI] 

      POP  EDI 
      POP  EBX 
end; 
+0

注意[QualityCentral现在已经关闭(https://community.embarcadero.com/blogs/entry/quality-keeps-moving-forward),所以你不能访问'qc.embarcadero .com'链接了。如果您需要访问旧的QC数据,请查看[QCScraper](http://www.uweraabe.de/Blog/2017/06/09/how-to-save-qualitycentral/)。 – 2017-06-09 17:33:16

相关问题