15.unsafe类的CAS是怎么保证原子性的?

老王:小陈啊,上一章我们讲了usafe是个啥东西,以及unsafe提供的几大类的功能

老王:这一章啊,我们要花个时间专门讲unsafe提供的cas功能,这个cas的功能是我们后面将Atomic原子类体系的基础。

小陈:cas功能?上一章的时候不是已经介绍过了吗?

老王:上一章只是简单的介绍了一下CAS功能而已,但是关于unsafe的cas功能底层是怎么保证原子性的?在操作系统层面是怎么实现的?这些东西我们还没有讲。

由于的后面的并发知识非常多的使用到了unsafe的cas功能,所以啊,我们今天专门花一章的时间,来把CAS底层的原理弄懂

小陈:哦哦,原来是这样啊......

老王:上一章我们讲解CAS操作的时候,是直接通过( 对象地址 + 对象内部属性偏移量offset )直接定位要修改的变量在内存的位置,然后在内存级别的比较数据和修改数据。也就是像下面的图一样:

操作的时候直接根据 o对象地址 + offset偏移量地址,定位到demo属性在内存的位置,然后直接操作内存修改数据。

老王:由于CPU是不会直接读写主存的,数据读取的时候还是先将数据读取到高速缓存然后通过高速缓存传递给CPU写数据的时候也是先高速缓存,然后再将高速缓存的数据写入内存;于是可以得到下面的图形:

老王:小陈啊,想想一下上面的那副图,如果在多线程并发操作的时候会有什么问题?

小陈:多个线程或者多个CPU同时读取和修改demo属性的时候,可能会导致数据不一致的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值