volatile 保证可见性疑惑?

发布于 2022-09-12 02:18:28 字数 276 浏览 20 评论 0

volatile关键字保证数据在各个CPU高速缓存中的可见性.

一个CPU改变了其缓存的值, 会立即更新主内存的值, 并使得其他CPU中的缓存失效.

这貌似是一句简单而正确的话, 我不理解其中的细节. 这句话实际上干了两件事, 一个刷新内存, 一个通知其他CPU缓存失效

我想问一下, 这个两个操作是原子操作吗?

其他CPU发现缓存失效之后, 必须从主内存中重新获取值, 那么其内部不依赖这个缓存数据的指令能否并行执行, 或者说必须先lock, 取回新值之后才能重新执行计算?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝眸 2022-09-19 02:18:28

我了解到的和你有点不同, java内存模型对 volatile 有特殊规定,所以才使其具有可见性。

  1. 规定了 read->load->use 的顺序一定,保证了 读的原子性
  2. 规定了 assign->store->write 的顺序一定, 保证了 写的原子性
  3. 规定了对 volatile 变量同样指令的先后顺序 和 内存屏障,保证的指定不重排
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文