我最近在读关于 Compare And Swap 的文章原子操作(CMPXCHG、.NET 的 Interlocked.CompareExchange 等)。
我了解它在内部是如何工作的,以及它是如何从客户那里使用的。
我不太明白的是什么时候有人会使用 CAS?
维基百科说:
CAS is used for implementing synchronization primitives like semaphores and mutexes, likewise more sophisticated lock-free and wait-free algorithms.
那么,谁能给我一个更通用的真实世界用例,其中包含代码和 CAS 使用说明?
这个问题与语言无关,所以任何语言都可以(首选基于 C 或 x86 汇编)。
谢谢!
最佳答案
通过示例很容易看出这一点。假设我们想以原子方式并发地对共享变量进行一些设置:
int shared = 0;
void Set(int index) {
while (true) {
if (Interlocked.CompareExchange<int>(ref shared, shared | (1 << index), shared) == shared)
break; //success
}
}
如果我们看到“旧值”(即返回值)同时发生变化,我们就会检测到失败。
如果这没有发生,我们就没有并发修改,所以我们自己的修改成功完成。
您可以使用这种技术实现非常复杂的东西。不过,旋转越复杂,性能损失就越大。
我想强调的是,CAS 的一个关键属性是它可能会失败,并且可以可靠地检测到失败。
关于c# - 比较和交换有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294229/