请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

cas有没有锁的控制

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

正在回答 回答被采纳积分+3

1回答

Jimin 2019-10-02 15:17:28

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

0 回复 有任何疑惑可以回复我~
  • 提问者 YX_油腻 #1
    cas实现里“对比主存和工作内存是否相等,相等则更新”这个合在一起是一个底层的指令完成的.
    那可以理解为这个底层的指令保证了在比较的过程,更新的过程中不会有第二个线程获取主存中的值。实际上不含有锁。但是实现了和加锁相似的效果。
    回复 有任何疑惑可以回复我~ 2019-10-02 18:36:11
  • 提问者 YX_油腻 #2
    这个底层的执行是cpu层面的吗?已经超出了java的范围??
    回复 有任何疑惑可以回复我~ 2019-10-02 18:37:21
  • Jimin 回复 提问者 YX_油腻 #3
    这个最底层是native标识的代码,这种的实际实现已经不是java实现的了
    回复 有任何疑惑可以回复我~ 2019-10-04 14:59:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信