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

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前后指令不能重排序。

相关文章:

  • 解决Spring Boot多模块自动配置失效问题
  • 【MFC】 VS2022打开低版本的MFC,双击.rc文件,DIalog加载失败,页面弹窗fatal error RC***:cannot open*****
  • 使用 AI Agent 改善师生互动的设计文档
  • 探秘LLM推理模型:hidden states中藏着的self verification的“钥匙”
  • 串口通讯协议文档
  • SpringCloud搭建Eureka注册中心
  • 【重磅】敲敲云桌面版正式发布!
  • 销售新人必看!5大秘籍助你快速上手,告别迷茫!
  • 07 Python 字符串全解析
  • Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)
  • AI 开发工具提示词集体开源!解锁 Cursor、Cline、Windsurf 等工具的核心逻辑
  • 鸿蒙应用开发证书考试的一点想法
  • 【Linux】gdb工具,Linux 下程序调试的 “透视眼”
  • C++学习:六个月从基础到就业——STL:函数对象与适配器
  • day003
  • Power BI仪表盘:一眼看懂关键数据
  • EFL格式|动态库加载 | 重谈地址空间(2)
  • Appium自动化开发环境搭建
  • JDBC 批处理与事务处理:提升数据操作效率与一致性的密钥
  • Linux进程学习【进程状态】
  • 瑞士外长答澎湃:瑞中都愿升级自贸协定,关税战没有任何好处
  • 特朗普称已为俄乌问题设最后期限,届时美国态度或生变
  • 漫画阅读APP刊载1200余部侵权作品:20人获刑,案件罚金超千万元
  • 百年前的亚裔艺术家与巴黎
  • 聚焦“共赢蓝色未来”,首届 “海洋命运共同体”上海论坛举行
  • 魔都眼·上海车展③ |被外籍展商围观的国产品牌