C++ volatile关键字(多线程中声明为易变值不稳定值,告诉程序每次都从内存读取,不被编译优化,防止被优化后变量异常)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ volatile关键字(多线程中声明为易变值不稳定值,告诉程序每次都从内存读取,不被编译优化,防止被优化后变量异常)相关的知识,希望对你有一定的参考价值。

文章目录

作用

volatile 关键字告诉编译器该变量可能会在程序的任意时刻被改变,不应该被优化或缓存,每次访问该变量时都应该从内存中读取。在多线程程序中,如果一个变量可能被多个线程同时访问和修改,那么就应该将其声明为 volatile,以确保每个线程都能看到该变量的最新值。

不加volatile可能会产生什么后果

如果一个变量被多个线程访问并修改,那么这个变量在不同的线程中可能存在不同的副本,因此一个线程对该变量的修改可能不会被其他线程立即感知。这时候可以使用volatile关键字,它的作用是强制要求编译器每次从内存中读取该变量的值,而不是从缓存中读取。这样可以确保每次读取的都是最新的值,从而保证线程之间的可见性和协同工作。

在C++类中private中定义volatile bool bRunning_的示例中,volatile关键字用于保证线程在修改bRunning_时能够感知到其他线程对该变量的修改。如果不加volatile关键字,编译器可能会对bRunning_进行一定程度的优化(尤其是在开启优化等级高的时候),从而导致程序的行为出现意外的错误。因此,在多线程程序中,如果一个变量会被多个线程访问并修改,应该使用volatile关键字来修饰它。

其他说明

参考文章:嵌入式C语言之-你会使用volatile吗?

以上是关于C++ volatile关键字(多线程中声明为易变值不稳定值,告诉程序每次都从内存读取,不被编译优化,防止被优化后变量异常)的主要内容,如果未能解决你的问题,请参考以下文章

volatile变量

JAVA多线程学习- 三:volatile关键字

JAVA多线程基础学习三:volatile关键字

C++面试考点

关键字volatile

C语言中volatile在啥情况下使用