在今天这个天气并不晴朗,但依然很开心的日子里,我们一起透过汇编看volatile.
首先一些基础知识
volatile是一个类型修饰符。
比如:private volatile int goon;
作用:确保某变量不会因编译器的优化而去读寄存器的值,且要求每次重新去读它所在真正空间的值。
那什么是编译器的优化呢?(请看下面我的理解)
编译器的优化:在一个线程里,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后再取变量值时,就直接从寄存器中取值;
而引发的问题如下:
当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致,
1.但当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致,
2.和当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。
下来我们给出一段C语言代码来看看<