volatile关键字的用法,volatile关键字含义
像const一样,volatile关键字也是一个类型修饰符。修改后的变量表示会被编译器的一些未知因素(操作系统、硬件、其他线程)改变。编译器不优化数据,特殊地址可以访问。
挥发效应?一个通用程序在运行时,运算通常交给CPU,CPU具有运算和控制两种功能,运算分为逻辑运算和算术运算。实际场景判断时,比如while语句的条件,会交给CPU进行逻辑判断。如果为真,返回1继续,如果为真,返回1继续,CPU默认优化数据。所谓优化,本质上是一种阻止优化的“内存覆盖”。
为了不读码判断,CPU每次都会直接读取寄存器中的条件。从代码层面来说,其实CPU根本不读取数据。在汇编层,CPU会跳到自己身上。
但是当另一个逻辑改变while中条件的值时(多线程逻辑是并行的),CPU仍然会得到寄存器中原始条件的值,导致结果异常。Volatile通过覆盖内存来防止这种情况。
应用场景?以Linux为例:
分析汇编代码。
Mov:将过程放入exa
测试:Test,这里是我和我自己之间的测试(按位and,按位OR等。)
Jne:跳转不等于零,测试结果不为0,跳转到相关地址40040d。
Jmp:跳到40040d(这里是跳到自己)
总结一下,volatile就是保持内存可见性!确保每次都从内存中读取数据。
今天到此为止。我感动了我的家人。
原创作品来自懂蓝天的博主,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。