dri*_*ood 5 java atomicity compare-and-swap
我正在研究Java书籍中的并发包。我不太了解本书中有关CAS操作的内容。下面的代码示例是counter本书中的线程安全类。
public class Counter{
private AtomicInteger count = new AtomicInteger();
public void increment(){
count.getAndIncrement(); //atomic operation
}
....
}
Run Code Online (Sandbox Code Playgroud)
这是书中所说的。
实际上,即使诸如这样的方法也要
getAndIncrement()花费几个步骤来执行。此实现现在是线程安全的,因此称为CAS。CAS代表“比较并交换”。大多数现代CPU都有一组CAS指令。现在正在发生的事情的基本概述如下:
- 存储在count中的值将被复制到一个临时变量中。
- 临时变量增加。
- 将当前计数的值与原始值进行比较。如果未更改,则将旧值替换为新值。
好吧,我明白它关于多个步骤的说法。我不太了解的是枚举步骤中正在发生的事情。
- 存储在count中的值将被复制到一个临时变量中。
该临时变量在哪里?它在主存储器中,注册吗?还是特定于CPU体系结构?
- 将当前计数的值与原始值进行比较。如果未更改,则将旧值替换为新值。
原始值存储在哪里?不能是临时变量。那个人正在被修改,对吧?我想念什么?
谢谢