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

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务