标签:volatil 变量 local 计算 vol val 线程 oca 自己
volatile限定符的作用就是告知计算机,代理可以改变用volatile定义的变量的值,一般它被用于多个同时运行的线程中的共享数据,
例如:一个地址可能储存着当前系统的时钟时间,无论程序做什么,地址上的值都会随时间的变化而改变,或者这个地址是负责接收另一个
计算机传来的一些信息,就是这个地址储存的内容随时都会改变。
先认识一下volatile的语法
volatile int local; //local是一个易变的变量
volatile int * polc; // polc是一个指向易变位置的指针
那么volatile的作用是什么呢?就是涉及到一个编译器的优化问题:
例如:
val1=x;
/*中间是不是用x的一些代码*/
val2=x;
分析:智能的编译器会注意到以上代码使用了两次的x,但并没有改变他的值,于是编译器就把它的值临时储存在寄存器中,然后在val2需要使用x的时候,才从寄存器中
读取x的值,并不是从x的原始地址的内存位置上读取,这样可以节约时间,这个过程被称为高速缓存(caching),如果在这中间过程一些其他的代理改变了x的值,但是编译器不知道
那么这段程序x的值赋给val2就已经过时了,所以加上volatile定义x这个变量后,编译器不会进行高速缓存。
此内容来自《C primer plus》加上自己的理解,有错误的话各位大神请在评论区指出!
标签:volatil 变量 local 计算 vol val 线程 oca 自己
原文地址:https://www.cnblogs.com/masterMimic/p/13194865.html