【C】volatile 关键字

volatile

1)基本概念

const是C语言的一个关键字。

const用于告诉编译器相应的变量可能会在程序的控制之外被修改,因此编译器不应该对其进行优化。

声明语法:

volatile int A;

作用:

  • 防止编译器优化,确保对变量的每次访问都是实际的读写操作,而不是使用缓存中的值。
  • 用于表示可能会被异步修改的变量,如硬件寄存器、中断服务程序中的共享变量等。

2)用途:禁止编译器优化

在学习这个知识点前,需要大概了解下代码运行的实质

对于一个简单的乘法运算a = a * b

在RISC中要使用4条汇编指令:

① 读内存中的a

② 读内存中的b

③ 在CPU中计算a*b

④ 把结果写回内存

img

问题:正常流程是上面的四步,但是,编译器可能会对变量的读写进行优化,例如将变量A缓存在CPU自己的寄存器中,下次使用的时候直接读CPU寄存器中的A,而不去读内存中的A,但内存中的A可能已经发生了变化,这样可能导致无法正确地捕捉到变量的实际变化。

为了解决这种问题,用volatile 去修饰Avolatile int A; 就可以禁止编译器优化,确保对变量的每次访问都是实际的读写操作。

这种BUG一般发生在多线程环境中,全局变量等共享量,没有管理好。

3)总结

volatile 的使用需要谨慎,特别是在多线程编程中,建议使用专门设计用于同步的机制来保障正确性。

volatile 不能替代更强大的同步手段,如互斥锁、原子操作等。

相关推荐

  1. volatile关键字

    2024-01-13 08:18:02       15 阅读
  2. Flutter 关键字

    2024-01-13 08:18:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 08:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 08:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 08:18:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 08:18:02       20 阅读

热门阅读

  1. 极智芯 | 解读自动驾驶芯片之英伟达DRIVE系列

    2024-01-13 08:18:02       38 阅读
  2. Visual Studio Code连接不上Ubuntu的解决办法

    2024-01-13 08:18:02       36 阅读
  3. LeetCode1590. Make Sum Divisible by P

    2024-01-13 08:18:02       34 阅读
  4. 【Leetcode】673.最长递增子序列的个数(Hard)

    2024-01-13 08:18:02       34 阅读
  5. python希尔排序

    2024-01-13 08:18:02       35 阅读
  6. 排序之堆排序

    2024-01-13 08:18:02       40 阅读
  7. Nacos_Linux上部署nacos

    2024-01-13 08:18:02       38 阅读
  8. Flink

    Flink

    2024-01-13 08:18:02      35 阅读
  9. 修改默认负载均衡策略(Ribbon)

    2024-01-13 08:18:02       40 阅读
  10. 使用spark将MongoDB数据导入hive

    2024-01-13 08:18:02       36 阅读