我最近在阅读有关Compare And Swap原子操作(CMPXCHG,.NET的Interlocked.CompareExchange,无论如何)的信息。
我了解它在内部如何工作,以及如何在客户端使用它。
我不太清楚是什么时候有人使用CAS?
维基百科说:

因此,有人可以给我一个更通用的实际用例,其中包含代码和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的关键特性是它可以失败并且可以可靠地检测到失败。

07-24 09:44
查看更多