volatile关键字无法应用在递增场景的原因

http://www.cnblogs.com/dolphin0520/p/3920373.html#!comments

其中2.volatile保证原子性吗?中的例子的问题,评论中15楼的回答个人感觉有道理,如下:

1、线程1读取inc的值后,还没有操作就被阻塞了。
2、线程2被唤醒,从主存读取inc的值,加1,然后被阻塞。(此时还没来得及把新的值重新赋值给inc,当然也还没同步到主存
3、线程1被唤醒,inc值加1,然后同步到主存(线程1结束)
4、线程2被唤醒,把最新的值赋值给inc,同步到主存(此时线程2,inc的值在第2步时已经被处理过了,仅仅只是把新的值赋值给inc而已。这个时候是不会再去读取inc的缓存行的,虽然inc的缓存行此时已经无效了

 

因此如果一个域的值依赖于它以前的值(如递增)或其值收到其他域的限制,则volatile无法起作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值