news 2026/4/19 22:55:19

volatile

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
volatile

volatile 保证可见性的底层原理(核心)

volatile的可见性并非 “跳过缓存直接读写总线 / 主存”,而是通过两个机制强制缓存同步:

1. 缓存一致性协议(MESI)

CPU 层面的硬件协议(Intel 架构为主),解决多核心缓存同步问题,核心逻辑:

  • 当某个 CPU 核心修改了volatile变量的缓存行(Cache Line),会将该缓存行标记为「已修改(Modified)」;
  • 同时通过「总线嗅探(Bus Snooping)」机制,通知其他核心:该变量的缓存行已失效(Invalid);
  • 其他核心再读取该volatile变量时,发现自己的缓存行失效,会主动丢弃私有缓存的旧值,从主存重新加载最新值。
2. 内存屏障(Memory Barrier)

JVM 层面为volatile变量的读写添加的 “屏障指令”,禁止 CPU 重排序并强制缓存同步:

  • 写屏障(Store Barrier):对volatile变量写操作后,插入写屏障,强制将私有缓存中的修改刷回主存,且保证写操作之前的指令不会被重排序到屏障之后;
  • 读屏障(Load Barrier):对volatile变量读操作前,插入读屏障,强制清空私有缓存的旧值,从主存重新加载最新值,且保证读操作之后的指令不会被重排序到屏障之前。

volatile 的正确执行流程

以线程 A 修改volatile变量、线程 B 读取该变量为例:

  1. 线程 A 修改volatile变量:
    • 先修改自己私有缓存中的副本;
    • 写屏障触发:将修改后的缓存行刷回主存,并通过 MESI 标记其他核心的该缓存行为 “失效”;
  2. 线程 B 读取该volatile变量:
    • 读屏障触发:检查私有缓存,发现缓存行已失效;
    • 主动从主存加载最新值到自己的私有缓存;
    • 线程 B 读取私有缓存中的最新值(而非直接读总线 / 主存)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 15:16:14

Yolo家族新搭档:Qwen-Image为视觉任务生成高质量提示图

Yolo家族新搭档:Qwen-Image为视觉任务生成高质量提示图 在智能视觉系统日益复杂的今天,一个常被忽视却至关重要的环节浮出水面——高质量训练数据的获取与标注。尤其是目标检测模型如YOLO系列,在真实场景中部署时往往受限于数据多样性不足、…

作者头像 李华
网站建设 2026/4/18 15:59:27

Keep告警管理平台:从零构建智能运维体系

Keep告警管理平台:从零构建智能运维体系 【免费下载链接】keep The open-source alerts management and automation platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 在数字化转型浪潮中,企业运维团队面临着前所未有的挑战。监…

作者头像 李华
网站建设 2026/4/17 17:31:44

HuggingFace镜像网站推荐|快速拉取Qwen-Image模型权重教程

HuggingFace镜像网站推荐|快速拉取Qwen-Image模型权重教程 在当前AIGC(人工智能生成内容)浪潮席卷各行各业的背景下,文生图模型正从实验室走向生产线。无论是电商海报自动生成、影视概念设计,还是社交媒体内容创作&am…

作者头像 李华
网站建设 2026/4/16 14:04:40

基恩士内置RS232串口

基恩士内置串口与电脑的串口接线如下(U10是DB9针):DB9针的每个针脚定义如下:(RS232通讯只需要用到2,3,5针脚)总结:对于RS232,标准的DB9接线应该是2-Rx&#x…

作者头像 李华
网站建设 2026/4/16 13:02:08

3分钟掌握pywencai项目Cookie获取的完整方法

在金融数据采集领域,Cookie是维持用户身份验证和会话状态的关键凭证。pywencai作为获取同花顺问财数据的开源工具,其Cookie获取机制直接影响数据采集的成功率和稳定性。本文将为您提供一套简单高效的Cookie获取解决方案,帮助您快速掌握这一核…

作者头像 李华
网站建设 2026/4/18 16:58:01

逗号运算符

C语言逗号运算符(,)是一种特殊的二元运算符,用于将多个表达式连接成一个复合表达式,其整体值为最后一个表达式的值。 基本语法与求值规则 逗号运算符的基本形式为:表达式1, 表达式2, ..., 表达式n,计算时从…

作者头像 李华