InterlockedExchange

 

 

LONG 
  InterlockedExchange(
    IN OUT PLONG  Target,
    IN LONG  Value
    );


 

InterlockedExchange(a,b)能以原子操作的方式交换俩个参数a, b,并返回a以前的值;因为InterlockedExchange 是原子函数,不会要求中止中断,所以交换指针的方式是安全的。

假设有线程1和线程2调用f()函数,线程1先调用到InterlockedExchange(&g, TRUE);线程2再调用时,函数InterlockedExchange()总返回TRUE,则线程2sleep(0);而直到线程1调用InterlockedExchange(&g, FALSE);后线程2才可能由于调用InterlockedExchange(&g,, TRUE),返回FALSE而退出循环接着工作。这样在//进行其他的操作这里就能操作共享数据而不会引起争议。当然这种方法会浪费cpu时间,因为cpu要不断地执行InterlockedExchange()函数,使用时应注意。

// 线程1
InterlockedExchange(&g, TRUE);				// 步一
//..
InterlockedExchange(&g, FALSE);				// 步三



//线程2
while(TRUE == InterlockedExchange(&g, TRUE))// 步二
{
	sleep(0);
	// 等待
}

// 线程2跳出循环了
											// 步四


 

 

Windows Driver Kit: Kernel-Mode Driver Architecture
InterlockedExchange

The InterlockedExchange routine sets an integer variable to a given value as an atomic operation.

LONG 
  InterlockedExchange(
    IN OUT PLONG  Target,
    IN LONG  Value
    );
Parameters
Target 
Pointer to a variable to be set to the supplied  Value as an atomic operation. 
Value 
Specifies the value to which the variable will be set. 

 

Return Value

InterlockedExchange returns the value of the variable at Target when the call occurred.

Headers

Declared in Wdm.h. Include Wdm.hNtddk.h, or Ntifs.h

Comments

InterlockedExchange should be used instead of ExInterlockedExchangeUlong, because it is both faster and more efficient. 

InterlockedExchange is implemented inline by the compiler when appropriate and possible. It does not require a spin lock and can therefore be safely used on pageable data.

A call to InterlockedExchange routine is atomic only with respect to other InterlockedXxx calls. 

Interlocked operations cannot be used on non-cached memory.

Callers of InterlockedExchange can be running at any IRQL.

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值