[英]Don't understand CAS operations in Java atomic package
我正在研究Java书中的并发包。 我不太明白这本书关于CAS操作的内容。 以下代码示例是本书中的线程安全counter
类。
public class Counter{
private AtomicInteger count = new AtomicInteger();
public void increment(){
count.getAndIncrement(); //atomic operation
}
....
}
这是本书所说的内容。
实际上,即使像
getAndIncrement()
这样的方法仍然需要执行几个步骤。 这个实现现在是线程安全的原因是CAS。 CAS代表Compare And Swap。 大多数现代CPU都有一组CAS指令。 现在发生的事情的基本概要如下:
- 存储在count中的值将复制到临时变量中。
- 临时变量递增。
- 将当前计数值与原始值进行比较。 如果它未更改,则将旧值替换为新值。
好吧,我得到了关于多个步骤的说法。 我没有得到的是列举的步骤中发生的事情。
- 存储在count中的值将复制到临时变量中。
那个临时变量在哪里? 它是在主存中,注册吗? 或者这是针对CPU架构的?
- 将当前计数值与原始值进行比较。 如果它未更改,则将旧值替换为新值。
原始值存储在哪里? 它不能是临时变量。 那个人正在修改,对吗? 我错过了什么?
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.