Test and Set


BTS 指令,一般用在自旋锁上或者类似概念。自旋锁核心操作就是InterlockedBitTestAndSet。

InterlockedBitTestAndSet有两种实现:

1. ReactOS方法

static __inline__ BOOLEAN 
InterlockedBitTestAndSet(IN LONG volatile *Base, 
                         IN LONG Bit) 
{ 
LONG OldBit;

__asm__ __volatile__("lock "                          // 总线加锁  
                      "btsl %2,%1/n/t" 
                      "sbbl %0,%0/n/t" 
               :"=r" (OldBit),"=m" (*Base) 
               :"Ir" (Bit) 
        : "memory"); 
return OldBit; 
}

2. Windows方法

         BOOLEAN bRet = InterlockedBitTestAndSet(&num,3);
0042F9D5  lea         eax,[num]
0042F9D8  lock bts    dword ptr [eax],3
0042F9DD  setb        cl  
0042F9E0  mov         byte ptr [bRet],cl


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM