主内存的内容和工作区内容不一样
来源:3-1 线程安全性-原子性-atomic-1

李爽爽爽爽
2018-11-05
老师你好,对于cas算法,如果var1对象的变量var2和从主内存中读取出来的var5不一样的话,系统里面会进行什么操作,更新var1对象还是说直接把主内存里面的东西全部读取到工作内存?还是怎么样?
写回答
1回答
-
Jimin
2018-11-05
你好,compareAndSwapInt是cas的核心,这个方法里传入的参数包含了 当前工作线程的值、更新后的值。
执行这个方法时,其实是调用cpu的一条指令去执行的,当这条cpu指令执行时,会校验主存里的最新值和当前工作线程里的值是否相同,如果相同,则更新为目标值,返回true,不同的话不更新且返回false。这一次到这里就执行完了。
如此,可以看出一次cas执行并不一定能完成更新,因此这里引入了while循环。返回false时,则通过getIntVolatile方法(相当于使用了volatile关键字)来获取最新主存的值,更新传入cas中的参数:当前工作线程最新值、调整后更新值。
继续执行compareAndSwapInt,如果返回false则不断更新当前工作线程值和调整后更新的值(说明此时并发修改这个值的线程很多),直到返回true,这时更新成功。032018-11-06
相似问题