【C语言】volatile变量


1、volatile的作用

volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
例如:

int a=1;

编译器的优化:
在线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后再取变量值时,就直接从寄存器中取值;
当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致
当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致
当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。

2、使用场景

  • 嵌入式中,硬件有可能会改写变量的值,如果不重新取值,会导致这个变量的取值不一定正确
  • 多线程,本线程中的变量有可能被其他线程修改。
  • 其他

3、volatile

volatile int a=1;

加了volatile每次使用时,编译器都会重新取值。

猜你喜欢

转载自blog.csdn.net/chuhe163/article/details/103839307
今日推荐