cas有没有锁的控制
来源:3-4 线程安全性-可见性
![](http://img1.sycdn.imooc.com/user/6498eea80001339806400640-100-100.jpg)
YX_油腻
2019-09-30
cas中是不是也有锁的控制。一个线程在cas进行处理的时候。他从主存中获取到最新的值。然后和自己工作内存中的值进行比较。一致则进行后续操作。他在获取主存值然后进行比较的时候。这个时刻如果线程2开始执行。他从主存中获取到值就还没有发生变化,这个时候是不是就会出现问题。所以cas在处理的时候除了不断从主存中获取最新的值与工作内存中的值进行比较。
是不是在获取主存中的值然后与工作内存中的值进行比较。处理后刷回主存的时候还需要锁的控制。
写回答
1回答
-
Jimin
2019-10-02
你好,这个理解稍微有点问题,cas实现里“对比主存和工作内存是否相等,相等则更新”这个合在一起是一个底层的指令完成的,不存在锁
“如果不等,则通过volatile再次获取主存里的值,更新相关变量,并再次尝试cas更新流程”这个步骤是通过自旋完成的,白话来说是通过死循环来保证的,直到更新成功为止。这个过程也是不含锁的。032019-10-04
相似问题