我遇到了函数InterlockedExchange,想知道什么时候应该使用这个函数。在我看来,在x86处理器上设置32位值应该始终是原子的?
在我想使用函数的情况下,新值并不依赖于旧值(这不是一个递增操作)。你能提供一个这个方法是强制的例子吗(我不是在找InterlockedCompareExchange)
发布于 2008-10-16 13:28:41
在多处理器或多核机器中,每个核心都有自己的缓存-因此每个核心都有各自潜在的不同“视图”,即系统内存的内容是什么。
线程同步机制负责核心之间的同步,有关更多信息,请查看http://blogs.msdn.com/oldnewthing/archive/2008/10/03/8969397.aspx或谷歌的获取和释放语义
发布于 2008-10-16 13:25:59
除了写入新值之外,InterlockedExchange
还读取并返回先前的值;整个操作是原子的。这对lock-free algorithms很有用。
(顺便说一句,32位写入不能保证是原子的。例如,考虑写入未对齐并跨越高速缓存边界的情况。)
发布于 2008-10-16 13:27:10
设置32位值是原子的,但只有在设置文字的情况下才是这样。
B=a是2个操作:
mov eax,dword ptr [a]
mov dword ptr [b],eax
从理论上讲,第一次和第二次操作之间可能会有一些中断。
https://stackoverflow.com/questions/208490
复制相似问题