volatile关键字保证数据在各个CPU高速缓存中的可见性.
一个CPU改变了其缓存的值, 会立即更新主内存的值, 并使得其他CPU中的缓存失效.
这貌似是一句简单而正确的话, 我不理解其中的细节. 这句话实际上干了两件事, 一个刷新内存, 一个通知其他CPU缓存失效
我想问一下, 这个两个操作是原子操作吗?
其他CPU发现缓存失效之后, 必须从主内存中重新获取值, 那么其内部不依赖这个缓存数据的指令能否并行执行, 或者说必须先lock, 取回新值之后才能重新执行计算?
volatile关键字保证数据在各个CPU高速缓存中的可见性.
一个CPU改变了其缓存的值, 会立即更新主内存的值, 并使得其他CPU中的缓存失效.
这貌似是一句简单而正确的话, 我不理解其中的细节. 这句话实际上干了两件事, 一个刷新内存, 一个通知其他CPU缓存失效
我想问一下, 这个两个操作是原子操作吗?
其他CPU发现缓存失效之后, 必须从主内存中重新获取值, 那么其内部不依赖这个缓存数据的指令能否并行执行, 或者说必须先lock, 取回新值之后才能重新执行计算?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
我了解到的和你有点不同, java内存模型对
volatile
有特殊规定,所以才使其具有可见性。volatile
变量同样指令的先后顺序 和 内存屏障,保证的指定不重排