宜兴通达竭诚为您服务。

InterlockedExchange

2016-12-15 11:12:00     作者: Administrator     来源:互联网,版权归作者所有     浏览次数: 320     文字大小:【】【】【

  1. LONG   
  2.   InterlockedExchange(  
  3.     IN OUT PLONG  Target,  
  4.     IN LONG  Value  
  5.     );  

 

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. // 线程1  
  2. InterlockedExchange(&g, TRUE);              // 步一  
  3. //..  
  4. InterlockedExchange(&g, FALSE);             // 步三  
  5.   
  6.   
  7.   
  8. //线程2  
  9. while(TRUE == InterlockedExchange(&g, TRUE))// 步二  
  10. {  
  11.     sleep(0);  
  12.     // 等待  
  13. }  
  14.   
  15. // 线程2跳出循环了  
  16.                                             // 步四  

 

 

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.

相关文章 评论

服务原则及地区范围

宜兴通达团队,在企业网络维护和企业信息化建设与咨询方面,有10多年经验。

我团队愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!

通达团队提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。

宜兴地区提供上门服务:

  • 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
  • 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。
  • 联系电话:189-21-343434
  • 在线沟通: