详解C/C++中volatile关键字

C语言关键字volatile

C语言关键字volatile(注意它是用来修饰变量而不是上面介绍的volatile)表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程,

也就是说,线程一和线程二使用同一个变量、
但是由于编译器优化,导致线程一更改该变量后,将其缓存在寄存器中,还没来得及其更新到内存中,线程二使用到该变量时,从内存中读取该变量,就无法获取到该变量的真实值。

为什么要做这种优化?
因为cpu从寄存器中读写数据远快于cpu从内存中读写数据,
线程一使用完该变量后,就将其存放在了寄存器,然而线程二并不知道线程一把该变量放在了寄存器中,还傻傻的从内存中读取该变量,肯定读不到正确的值(即更新后的值)

volatile的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化
https://blog.csdn/weixin_44363885/article/details/92838607?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164238237016780261926922%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164238237016780261926922&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-3-92838607.first_rank_v2_pc_rank_v29&utm_term=volatile%E5%85%B3%E9%94%AE%E5%AD%97%E7%9A%84%E4%BD%9C%E7%94%A8+c&spm=1018.2226.3001.4187

更多推荐

详解C/C++中volatile关键字 编译器优化 是怎么优化的? volatile又是如何防止编译器优化的