CAS算法中的比较,应该就是将自己线程工作内存的值(M)与主内存的值(E)进行比较吧,不知道理解是否对? 如果第一次比较不相等,那么就继续while循环比较直到相等然后执行更新操作,假如线程1第一次比较失败,线程2操作成功并把主内存更新为最新值2,线程1进行第二次比较时E为2,那线程1的工作内存M值什么时候会为成2呢?还是说会一直死循环
1 回答

慕用8428640
TA贡献1条经验 获得超0个赞
首先这里Volatile 关键字已经保证了可见性 ;
然后这段代码需要保证的是从获取到重新赋值这个过程中,没有别的线程对该值进行了修改。
在调用CAS方法的时候是传入的参数是内存地址,native方法会根据内存地址取出最新的值和传入的预期值进行比较。如果一致说明没有被修改,如果不一致说明从取出到再赋值的这个过程中已经被别的线程修改。这时候再重复做一起取值比较,直到成功。
添加回答
举报
0/150
提交
取消