volatile的原子性问题

volatile为什么不能保证原子性有大佬能解释下吗,看了很多网上的博客都说因为i++这种操作不是原子性的,可是就算他不是原子性的,其中一个线程更新主存中的值的时候,其他线程缓存的值不是会失效吗。还有人说是因为其他线程读取过了就不会读取了,这就更说不通了,如果读取过不会读取了,那可见性是干嘛的?就好比三个线程同时读取了一个值,其中一个线程修改了这个值写回内存,另外两个线程肯定会重新读取这个值啊,怎么可能读取过不会读取。把我整懵了
全部评论
假设多个线程进行a++操作,线程1进行了a+1,并传到了线程1的缓存中,同时线程2也进行完了a+1的操作,因为线程1的值改变了,将值写回内存,线程2重新去内存取a的值,但是线程2已经做了a+1的动作了,所以不会再重新做a+1的操作,这样就相当于a少加了一次。个人理解
点赞 回复 分享
发布于 2020-07-22 18:24
因为其他线程缓存会失效,但是寄存器不会失效,如果其他线程已经读进寄存器了,就无法保证原子性
点赞 回复 分享
发布于 2020-07-22 18:18

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 15:19
简历上能写3个月吗?
码农索隆:大胆写,主要你能把实习经历包装好,可以看一下我这篇帖子https://www.nowcoder.com/share/jump/4888395581180798063
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务