volatile 保证可见性疑惑?
volatile关键字保证数据在各个CPU高速缓存中的可见性.
一个CPU改变了其缓存的值, 会立即更新主内存的值, 并使得其他CPU中的缓存失效.
这貌似是一句简单而正确的话, 我不理解其中的细节. 这句话实际上干了两件事, 一个刷新内存, 一个通知其他CPU缓存失效
我想问一下, 这个两个操作是原子操作吗?
其他CPU发现缓存失效之后, 必须从主内存中重新获取值, 那么其内部不依赖这个缓存数据的指令能否并行执行, 或者说必须先lock, 取回新值之后才能重新执行计算?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我了解到的和你有点不同, java内存模型对
volatile
有特殊规定,所以才使其具有可见性。volatile
变量同样指令的先后顺序 和 内存屏障,保证的指定不重排