1.告诉compiler不能做任何优化2.表示用volatile定义的变量会在程序外被改变每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份
比如这个语句:while (ready==0);如果没有说明ready这个变量是volatile,这句话要么可能被编译器优化掉,要么可能只能执行一次,要么可能永远满足不了,成为死循环。
百科上说的很详细了 就是防止被编译器优化的
https://baike.baidu.com/item/volatile/10606957?fr=aladdin
用volatile关键字定义变量,相当于告诉编译器,
这个变量的值会随时发生变化,每次使用时都需要去内存里
程序里面的用到的变量会放到暂存取,如果不加volatile,第二次再读变量时候直接取了暂存取的值,而这时寄存器的数值变化了,那么读到的还是第一次的值,就不是第二次想要的,加了volatile每次读都去寄存器度,避免缓存导致出错。