标签:baidu 改变 访问 ola 函数 art 线程 http csdn
一.C++关键词Volatile
【问题来源】
https://blog.csdn.net/u013162035/article/details/78308140
可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断服务子程序修改一个指向一个buffer的指针时,必须用volatile来修饰这个指针。
【问题解析】
什么是Volatile?
定义为volatile的变量是说这变量可能会被意想不到地改变,即在你程序运行过程中一直会变,你希望这个值被正确的处理,每次从内存中去读这个值,而不是因编译器优化从缓存的地方读取,比如读取缓存在寄存器中的数值,从而保证volatile变量被正确的读取。
在单任务的环境中,一个函数体内部,如果在两次读取变量的值之间的语句没有对变量的值进行修改,那么编译器就会设法对可执行代码进行优化。由于访问寄存器的速度要快过RAM(从RAM中读取变量的值到寄存器),以后只要变量的值没有改变,就一直从寄存器中读取变量的值,而不对RAM进行访问。
而在多任务环境中,虽然在一个函数体内部,在两次读取变量之间没有对变量的值进行修改,但是该变量仍然有可能被其他的程序(如中断程序、另外的线程等)所修改。如果这时还是从寄存器而不是从RAM中读取,就会出现被修改了的变量值不能得到及时反应的问题。
详解:https://blog.csdn.net/weixin_41656968/article/details/80958973
深度剖析:https://www.cnblogs.com/god-of-death/p/7852394.html
标签:baidu 改变 访问 ola 函数 art 线程 http csdn
原文地址:https://www.cnblogs.com/wileywote0633/p/10441789.html