作用: volatile 关键词影响编译器编译的结果, 用 volatile 声明的变量表示该变量随时可能发生变化, 与该变量有关的运算, 不要进行编译优化, 以免出错.(使用 volatile 关键字修饰的变量, 告诉编译器每次读取数据从内存中读取, 而不是从编译器优化后的缓存中读取变量)
编译器优化原理:
单线程环境中: 如果在两次读取变量之间不改变变量的值, 编译器会发生优化, 会将内存中的值赋值到寄存器中, 由于访问寄存器的效率要高于内存, 所以需要读取变量时直接在寄存器中读取而不是内存;
多线程任务中: 虽然在两次读取变量之间不改变变量的值, 在一些情况下变量的值还是可能会发生变化 (比如发生中断程序), 如果编译器优化, 依旧从寄存器中获取变量的值, 修改的值就得不到及时的修改 (在内存中还未将新的值赋值给寄存器, 就已经获取到寄存器的值).
来源: http://www.bubuko.com/infodetail-3129484.html