关注
volatile方式的i++,总共是四个步骤: i++实际为load、Increment、store、Memory Barriers 四个操作。 内存屏障是线程安全的,但是内存屏障之前的指令并不是.在某一时刻线程1将i的值load取出来,放置到cpu缓存中,然后再将此值放置到寄存器A中(寄存器A中保存的是中间值,没有直接修改i,因此其他线程并不会获取到这个自增1的值),然后A中的值自增1。如果在此时线程2也执行同样的操作(在线程1的寄存器中的i自增前),获取值i==10,自增1变为11,然后马上刷入主内存。此时由于线程2修改了i的值,实时的线程1中的i==10的值缓存失效(缓存一致性协议),重新从主内存中读取,变为11(但此时寄存器中的值是不会再刷新了)。接下来线程1恢复,寄存器中的i进行自增。将自增过后的A寄存器值11赋值给cpu缓存i,最终结果是11,而不是预计的两次自增12。这样就出现了线程安全问题。 链接:https://www.zhihu.com/question/329746124/answer/1205806238 是不是这样的,大家讨论讨论
点赞
相关推荐
牛客热帖
更多
正在热议
更多
# 什么是优秀的实习经历 #
8792次浏览 216人参与
# 实习简历求拷打 #
13920次浏览 163人参与
# 被上班搭子“传染”了哪些习惯 #
5790次浏览 99人参与
# 秋招被挂春招仍然能投的公司 #
7096次浏览 100人参与
# 工作后,你落下了哪些病根 #
13915次浏览 191人参与
# 作业帮求职进展汇总 #
83496次浏览 547人参与
# mt对你说过最有启发的一句话 #
37234次浏览 442人参与
# 外包能不能当跳板? #
54170次浏览 256人参与
# 摸鱼被leader发现了怎么办 #
102296次浏览 650人参与
# 秋招特别不鸣谢 #
16061次浏览 181人参与
# 考研失败就一定是坏事吗? #
201587次浏览 1377人参与
# 选实习,你更看重哪方面? #
14528次浏览 221人参与
# 投格力的你,拿到offer了吗? #
153000次浏览 817人参与
# 一起聊美团 #
307277次浏览 1762人参与
# 京东美团大战,你怎么看? #
158188次浏览 861人参与
# 安克创新求职进展汇总 #
62394次浏览 541人参与
# 京东开奖 #
631715次浏览 3179人参与
# 第一次面试 #
1036621次浏览 13683人参与
# 今年秋招你收到了多少封邮件? #
18144次浏览 220人参与
# 担心入职之后被发现很菜怎么办 #
266441次浏览 1133人参与

