当前位置: 首页 > web >正文

volatile缓存可见性实现原理

1.缓存一致性问题

多核处理器架构中,每个核心都有自己的缓存(Cache),而主内存是所有核心共享的。当一个线程在某个核心上修改了一个共享变量时,这个修改可能只会更新到该核心的缓存中,并不会立刻写回到主内存中。其他核心上的线程读取这个变量时,可能会从它们自己的缓存中读取旧值,而不是最新的值。

2.缓存一致性协议

现代处理器使用特定的缓存一致性协议来维护多个缓存之间的一致性。最常见的是 MESI 协议(Modified, Exclusive, Shared, Invalid)。MESI 协议确保了当一个缓存行的状态发生变化时(例如,被标记为“已修改”或“无效”),其他缓存中的相应数据也会被更新或标记为失效。

当一个线程对 volatile 变量进行写操作时,根据 MESI 或类似的协议,这个写操作会强制将该变量对应的缓存行状态设为“无效”,从而导致其他核心在尝试访问这个变量时不得不从主内存中重新加载最新的值,从而实现了可见性。

3.可见性实现原理

底层是通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定),并回写到主内存。

lA-32和Intel 64 架构软件开发者手册对lock指令的解释:

1)将当前处理器缓存行的数据立即写回到系统系统内存。

2)这个回写内存的操作会引起在其他CPU里缓存了该内存地址的数据无效(MESI协议)

3)提供内存屏障功能,使lock前后指令不能重排序。

http://www.xdnf.cn/news/1950.html

相关文章:

  • 支付场景下,乐观锁的实现(简洁版)
  • AiFlutter 低代码平台介绍
  • hadoop-3.3.5.tar.gz 镜像
  • Hi3516CV608 超高清智慧视觉 SoC 芯片 可提供开发资料
  • Python 快速获取Excel工作表名称
  • Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析
  • 侧扫声呐概述
  • Ollama 常见命令速览:本地大模型管理指南
  • arcpy列表函数的应用(2)
  • 数据作为新生产要素,如何实现价值变现?
  • 向量数据库实践:存储和检索向量数据
  • Python实验三
  • 论文学习:《聚类矩阵正则化指导的层次图池化》
  • Java多线程
  • 2.5 桥梁桥面系及附属结构施工
  • kafka课后总结
  • Spring @Transactional 自调用问题深度解析
  • 【Unity 与c++通信】Unity与c++通信注意事项,参数传递
  • websheet之 自定义函数
  • 成都种业博览会预登记火热进行中,6月8日-9日成都世纪城新国际会展中心与您不见不散!
  • [密码学实战]商用密码产品密钥体系架构:从服务器密码机到动态口令系统
  • vue前端SSE工具库|EventSource 替代方案推荐|PUSDN平行宇宙软件开发者网
  • 如何申请游戏支付平台通道接口?
  • PyTorch生成式人工智能实战(3)——分类任务详解
  • 施磊老师基于muduo网络库的集群聊天服务器(七)
  • 容器的网络类型
  • 视频噪点多,如何去除画面噪点?
  • 【基于Qt的QQMusic项目演示第一章】从界面交互到核心功能实现
  • 常见移动机器人底盘模型对比(附图)
  • Codeforces Round 1020 (Div. 3) A-D