首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候应该使用Win32 InterlockedExchange函数?

什么时候应该使用Win32 InterlockedExchange函数?
EN

Stack Overflow用户
提问于 2008-10-16 13:13:51
回答 5查看 11.3K关注 0票数 19

我遇到了函数InterlockedExchange,想知道什么时候应该使用这个函数。在我看来,在x86处理器上设置32位值应该始终是原子的?

在我想使用函数的情况下,新值并不依赖于旧值(这不是一个递增操作)。你能提供一个这个方法是强制的例子吗(我不是在找InterlockedCompareExchange)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-16 13:28:41

在多处理器或多核机器中,每个核心都有自己的缓存-因此每个核心都有各自潜在的不同“视图”,即系统内存的内容是什么。

线程同步机制负责核心之间的同步,有关更多信息,请查看http://blogs.msdn.com/oldnewthing/archive/2008/10/03/8969397.aspx或谷歌的获取和释放语义

票数 4
EN

Stack Overflow用户

发布于 2008-10-16 13:25:59

除了写入新值之外,InterlockedExchange还读取并返回先前的值;整个操作是原子的。这对lock-free algorithms很有用。

(顺便说一句,32位写入不能保证是原子的。例如,考虑写入未对齐并跨越高速缓存边界的情况。)

票数 11
EN

Stack Overflow用户

发布于 2008-10-16 13:27:10

设置32位值是原子的,但只有在设置文字的情况下才是这样。

B=a是2个操作:

代码语言:javascript
复制
mov         eax,dword ptr [a] 
mov         dword ptr [b],eax 

从理论上讲,第一次和第二次操作之间可能会有一些中断。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/208490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档