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

【C#】关键字 volatile

volatile 是 C# 中一个用于多线程编程的关键字,作用是确保变量的可见性 —— 也就是说,一个线程对变量的修改,其他线程可以马上“看到”


🔍 为什么需要 volatile

在多线程中,CPU 和编译器可能会对代码进行优化,比如:

  • 把变量缓存到寄存器或 CPU cache 中;
  • 重排指令顺序;
  • 延迟同步内存中的变量值。

结果就是:

一个线程改了变量,另一个线程却看不到最新的值


volatile 的作用

volatile 告诉编译器和 CPU:“这个变量很重要,别给我优化!随时读写内存中的真实值。”


📌 用法语法

private volatile bool _running = true;

void ThreadMethod()
{
    while (_running)
    {
        // do work
    }
}

这样,另一个线程如果设置 _running = false;,这个线程能立刻感知到,不会卡在死循环中。


🧠 举个例子(不加 volatile 出问题)

bool running = true;

new Thread(() =>
{
    while (running) { }
}).Start();

Thread.Sleep(1000);
running = false; // 👈 这里设置为 false,线程可能 **看不到**!

这段代码可能会卡死,因为 running 被缓存了,线程读取的是老值。


✅ 加上 volatile:

volatile bool running = true;

new Thread(() =>
{
    while (running) { }
}).Start();

Thread.Sleep(1000);
running = false; // 👈 线程立刻感知,安全退出

⚠️ 注意事项

  1. volatile 只能用于字段(field),不能用于局部变量或属性。
  2. volatile 只适用于以下类型:
    • bool
    • byte, sbyte
    • short, ushort
    • int, uint
    • char
    • float
    • object, enum, IntPtr, UIntPtr, long*, double* 等指针类型
  3. volatile 不等于线程安全,它不保证原子性,只能保证“可见性”。

🧠 总结一句话:

volatile 让你在线程之间正确地观察到变量的变化,适合用于控制标志位(如循环退出),但不适合用于计数器、队列等需要原子操作的场景。

相关文章:

  • 【驱动智能交通的关键引擎 解析C-V2X发展挑战】
  • (面试常问)C++中的static关键字——静态局部、静态全局、静态函数、静态与单例线程安全性(C++11之后)等
  • ​Android Gradle 插件(AGP)版本与 ​Gradle 版本需要严格对应
  • 体育赛事即时比分 分析页面的开发技术架构与实现细节
  • Python----计算机视觉处理(Opencv:图像噪点消除:滤波算法,噪点消除)
  • 「查缺补漏」巩固你的 RabbitMQ 知识体系
  • CNG汽车加气站操作工备考真题及答案解析【判断题】
  • Java-智能家居系统小案例
  • Linux: 网络,arp的数量为什么会对交换机/路由器有性能的影响
  • async/defer/preload性能优化
  • 基于SpringBoot和Vue的SQL TO API平台的设计与实现
  • SQL语言分类及命令详解(一)
  • Java面试黄金宝典20
  • Java 实现将Word 转换成markdown
  • 便携版:随时随地,高效处理 PDF 文件
  • 数据驱动的教育革命:让学习更智能、更个性化
  • BNB Chain 何以打造 AI 驱动链上应用新世界?
  • 【数据仓库】湖仓一体的核心建模理论
  • 如何用 Postman 进行高效的 Mock 测试?
  • 【区块链 + 文化版权】基于 FISCO BCOS 的方言大数据语料库 | FISCO BCOS 应用案例
  • 2024年境内酒店住宿行业指标同比下滑:酒店行业传统增长模式面临挑战
  • 马克思主义理论研究教学名师系列访谈|丁晓强:马克思主义学者要更关注社会现实的需要
  • 从“长绳系日”特展看韩天衡求艺之路
  • 山西太原一居民小区发生爆炸,应急管理部派工作组赴现场
  • 新片|《我仍在此》定档5月,《新·驯龙高手》同步北美上映
  • 中国武术协会原主席张耀庭逝世,曾促成电影《少林寺》拍摄