volatile的原子性问题

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

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务