C++——volatile

正常情况下当发送信号时,程序就会结束,但如果在编译时加入优化选项如-O1,-O2...就不会退出。

但是因为flag的修改是在信号处理函数中修改的而不是main函数,编译器判定flag在循环中没有被修改,因此做出了优化,每次判断!flag时不再把flag从内存中读取到cpu寄存器进行判断,而是直接编译指令为:读取寄存器原来的值进行判断。


而volatile声明的变量,保证每次都会被从内存中拿取而不被优化(即使编译时加了优化选项)****。

相关推荐
阿钱真强道13 天前
课时04 嵌入式技术应用设计实训 | 定时器:定时中断
tim·定时器·volatile·定时中断·nvic·stm32f103·计秒表
Thinker QAQ16 天前
并发编程(七):volatile——从语言规则到 CPU
java·python·go·并发编程·volatile·memory model
ly76892 个月前
JVM 内存屏障与可见性:从 volatile 到 JSR-133 的底层实现
jvm·jit·volatile·内存屏障·jmm·jsr-133
J_bean2 个月前
阐述 volatile 和 synchronized 的区别以及底层原理
synchronized·volatile·原子性·可见性·有序性·指令重排
要开心吖ZSH2 个月前
本地缓存方案选择指南:volatile、ConcurrentHashMap、Caffeine 怎么选?
缓存·caffeine·volatile·本地缓存
j7~3 个月前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
ComputerInBook3 个月前
C & C++ 中的关键字 volatile 之详解
c语言·c++·volatile·编译器优化
折哥的程序人生 · 物流技术专研3 个月前
《Java 100 天进阶之路》第53篇:volatile与JMM(2026版)
java·volatile·内存屏障·可见性·java内存模型·jmm·java100天进阶
rebibabo3 个月前
Java高并发底层原理(七)volatile 到底解决了什么问题
java·学习笔记·volatile·可见性·有序性·指令重排
fengxin_rou5 个月前
【JUC第二章下】:锁机制&关键字
架构·事务·cas·juc·volatile