cas有没有锁的控制

来源:3-4 线程安全性-可见性

YX_油腻

2019-09-30

cas中是不是也有锁的控制。一个线程在cas进行处理的时候。他从主存中获取到最新的值。然后和自己工作内存中的值进行比较。一致则进行后续操作。他在获取主存值然后进行比较的时候。这个时刻如果线程2开始执行。他从主存中获取到值就还没有发生变化,这个时候是不是就会出现问题。所以cas在处理的时候除了不断从主存中获取最新的值与工作内存中的值进行比较。
是不是在获取主存中的值然后与工作内存中的值进行比较。处理后刷回主存的时候还需要锁的控制。

写回答

1回答

Jimin

2019-10-02

你好,这个理解稍微有点问题,cas实现里“对比主存和工作内存是否相等,相等则更新”这个合在一起是一个底层的指令完成的,不存在锁
“如果不等,则通过volatile再次获取主存里的值,更新相关变量,并再次尝试cas更新流程”这个步骤是通过自旋完成的,白话来说是通过死循环来保证的,直到更新成功为止。这个过程也是不含锁的。

0
3
Jimin
回复
YX_油腻
这个最底层是native标识的代码,这种的实际实现已经不是java实现的了
2019-10-04
共3条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程