volatile的作用:
1.防止编译器对汇编指令进行顺序上的优化,否则会带来意想不到的结果;
2.防止寄存器存储变量的副本值。(主要应用在多线程中)
防止多个线程对同一个全局/共享的变量进行缓存
使这多个线程每次去这个变量的内存中去取,而不是保存在自己的寄存器中,然后每次操作自己缓存中的值,如果不能及时的写回内存,会有不确定结果产生
既保证变量修改的“实时性”,也保证程序的确定性,
需要注意是,每次取变量的时候我们需要对该共享变量进行互斥访问的设置
示例1:
volatile int a =10;
.....
//通过volatile对变量a的修饰,编译器将不再会对关于a的操作进行顺序上的优化
扩展:
上述说的是volatile提醒编译器不要进行优化
还有对cpu对代码优化的禁止,防止cpu对语句的顺序的调优:
示例2:
语句1......
barrier();
语句2......