我遇到了InterlockedExchange函数,并想知道何时应该使用这个函数.在我看来,在x86处理器上设置32位值应该始终是原子的?
在我想使用该函数的情况下,新值不依赖于旧值(它不是增量操作).你能提供一个强制要求这个方法的例子(我不是在寻找InterlockedCompareExchange)
除了写入新值外,InterlockedExchange
还读取并返回先前的值; 整个操作都是原子的.这对于无锁算法很有用.
(顺便说一句,32位写入不保证是原子的.例如,考虑写入未对齐并跨越缓存边界的情况.)
InterlockedExchange
是写入和读取 - 它返回先前的值.
这是确保另一个线程在您执行之后不会写入不同值的必要条件.例如,假设您正在尝试增加变量.您可以读取值,添加1,然后使用设置新值InterlockedExchange
.返回的值InterlockedExchange
必须与您最初读取的值匹配,否则另一个线程可能会同时增加它,您需要循环并再次尝试.