volatile疑问

发布于 2022-09-13 00:33:04 字数 476 浏览 34 评论 0

我理解的

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文