关于volatile在linux系统下使用和在非局部跳转longjmp下的使用

  • 众所周知,volatile的使用时为了防止编译器对内存优化,确保每次取值时是从内存中取出的,而不是取得寄存器中的备份.

经常用于一下三个地方:①中断服务程序

                                     ②多线程共享

                                     ③访问并行设备的硬件寄存器.

  • 为了方便大家理解,可以看下面的代码:

     

      这个代码能计算除*ptr的平方吗?这实际是一个很容易犯的缺陷,上面代码可以展开为:

  

  你很难保证,a的取值和b的取值是不一样的,正确的写法应该是:

      

  •     大家在使用setjmp和longjmp进行函数间的跳转时,也要学会用volatile,因为在编译优化后不用volatile可能没有起到跳转的作用,可以参考如下结果:

   

原文地址:https://www.cnblogs.com/kwdeblog/p/11252073.html