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

转载于:https://www.cnblogs.com/fanzi2009/archive/2012/04/12/2444279.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值