volatile
是一个关键字,通常用于告诉编译器,所修饰的变量可能会在未经通知的情况下被程序之外的因素修改。这样的变量不应该被编译器优化,以确保每次访问该变量都会从内存中读取最新的值,而不是使用cache中的值或寄存器中的备份
常用场景
多线程环境:多任务环境下各任务间共享的标志应该加volatile
驱动程序的硬件寄存器:在嵌入式系统中,与硬件设备通信通常涉及读写硬件寄存器。这些寄存器的值可能会在程序之外被修改,使用 volatile
可以确保正确地读取这些寄存器的值。
驱动程序的中断服务程序:中断服务程序中修改的供其它程序检测的变量需要加volatile;