原子函数-InterlockedExchange
来源:互联网 发布:ios11必备软件 编辑:程序博客网 时间:2024/06/09 10:48
- 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跳出循环了
- // 步四
The InterlockedExchange routine sets an integer variable to a given value as an atomic operation.
LONG InterlockedExchange( IN OUT PLONG Target, IN LONG Value );
- 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.
Parameters
Return Value
InterlockedExchange returns the value of the variable at Target when the call occurred.
Headers
Declared in Wdm.h. Include Wdm.h, Ntddk.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.
- 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跳出循环了
- // 步四
The InterlockedExchange routine sets an integer variable to a given value as an atomic operation.
LONG InterlockedExchange( IN OUT PLONG Target, IN LONG Value );
- 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.
Parameters
Return Value
InterlockedExchange returns the value of the variable at Target when the call occurred.
Headers
Declared in Wdm.h. Include Wdm.h, Ntddk.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.
- 原子函数-InterlockedExchange
- InterlockedExchange(
- InterlockedExchange
- InterlockedExchange
- InterlockedExchange
- 原子函数
- 一些原子操作函数
- gcc 原子操作函数
- DWZ框架原子函数
- 原子操作及函数
- 什么叫原子表和原子函数?
- InterlockedExchange的返回值
- 原子函数调用时未被定义。。
- 原子访问--- Interlocked系列函数
- 原子操作 Interlocked系列函数
- 原子操作 Interlocked系列函数
- 原子操作 Interlocked系列函数
- gcc内置原子操作函数
- SSO 中间件 kisso
- Spark简述及基本架构
- Ubuntu如何安装SSH Server
- UNIX/Linux/BSD、POSIX、GNU
- cas maven install 报错 Invalid byte tag in constant pool: 15
- 原子函数-InterlockedExchange
- Intent 的使用
- iOS 9: UIStackView入门
- 我常用的AndroidStudio快捷键
- 我是一只妹纸,嘤嘤婴
- UML学习入门
- Servlet 生命周期、工作原理
- solr5.1 部署
- acl权限控制详解