CAS自旋锁的疑问

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

http://img4.mukewang.com/5e6754ac0001ea5b09510231.jpg

慕工程708809
浏览 679回答 1
1回答

慕用8428640

首先这里Volatile 关键字已经保证了可见性 ;然后这段代码需要保证的是从获取到重新赋值这个过程中,没有别的线程对该值进行了修改。在调用CAS方法的时候是传入的参数是内存地址,native方法会根据内存地址取出最新的值和传入的预期值进行比较。如果一致说明没有被修改,如果不一致说明从取出到再赋值的这个过程中已经被别的线程修改。这时候再重复做一起取值比较,直到成功。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java