老师,对于CAS有一些困惑?

来源:3-1 线程安全性-原子性-atomic-1

慕粉13799323360

2018-05-27

http://img.mukewang.com/szimg/5b0a5dec0001b38c09430531.jpg

写回答

1回答

Jimin

2018-05-27

你好,这篇手记 https://www.imooc.com/article/25277 我做了一些问题的整理,包括cas,你这个我单独复制出来:

关于CAS中compareAndSwapInt(var1, var2, var5, var5 + var4)的理解
compareAndSwapInt(var1, var2, var5, var5 + var4)换成 compareAndSwapInt(obj, offset, expect, update)能清楚一些,如果obj内的value和expect相等,就证明没有其他线程改变过这个变量,那么就更新它为update,如果这一步CAS没有成功,那就采用自旋的方式继续进行CAS操作。这块是一个CPU指令完成的,依旧是原子操作。

继续回答一下你的疑问。这里不会出现死循环。因为对比和更新的操作是通过一条cpu指令执行的,如果期望值检查通过更新了的话会返回true,循环就直接退出了。如果期望值检查不通过没更新会返回false,这是更新期望值为最新的值,再尝试更新,直到返回true。

1
7
不知所措_Kevin
回复
慕粉13799323360
我还是没明白你的第一个问题,var2 = 2, 期望值var5 = 3,第一次判断的时候实际值不等于期望值,返回false。 期望值就会变成2吗? 如果不变,那不就是一直循环下去了吗?
2018-06-09
共7条回复

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

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

3923 学习 · 832 问题

查看课程