很人可能对volatile不熟吧,它是说明一个变量和对象不仅可以由程序代码改变夜可以由硬件或操作系统,其他正在运行的线程所改变的。
所谓的不可见,是指编译器不可预见. 具体实现包括中断例程,多线程都可以改变变量的值. 举个例子: volatile int v; void func() { int a,b; a=5*v; b=5*v; …. } 如果v是个普通的变量,编译器很可能会做这样的优化, 第一次计算出5*v的值后,先赋给a,然后直接又从寄存赋给b, 而不会重新计算5*v. 如果定义成volatile,编译器则不会做任何优化,每次都会 重新读取v的值.