volatile疑问
我理解的
CPU:主内存、工作内存、store buffer、invalid queue
JMM 对编译器指令重排:volatile之间不能重排、volatile写与之前不能重排、volatile读与之后不能重排
对CPU重排:LoadLoad、LoadStore、StoreStore、StoreLoad
内存屏障:写、读、读写
问题描述
1.为啥volatile加内存屏障时有4个操作,LoadLoad这四个指令实际操作细节是啥,我理解应该是操作store buffer和invalid queue,加屏障是操作一个CPU的store buffer和invalid queue,还是所有的
2.对编译器的重排
2.1 volatile之间不能重排的原因是把volatile操作看做锁,而不能重排吗
2.2 volatile读写之前之后不能重排,我大概知道是并发顺序影响结果与操作器预读取赋值的,但有点模糊,能有完整的具体列子说明为啥指定这个规则嘛
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论