【C】volatile 关键字

目录

    • volatile
      • 1)基本概念
      • 2)用途:禁止编译器优化
      • 3)总结

volatile

1)基本概念

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

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

声明语法:

volatile int A;

作用:

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

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

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

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

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

① 读内存中的a

② 读内存中的b

③ 在CPU中计算a*b

④ 把结果写回内存

【C】volatile 关键字_第1张图片

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

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

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

3)总结

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

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

你可能感兴趣的:(c语言,开发语言,嵌入式,学习总结)