zoukankan      html  css  js  c++  java
  • C语言---volatile(我的工程笔记本)

    一般说来,volatile用在如下的几个地方:
    1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
    2、多任务环境下各任务间共享的标志应该加volatile;
    3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;
    另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2 中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
     
    典型的例子
    1
    for(int i=0; i<100000; i++);
    这个语句用来测试空循环的速度的
    但是编译器肯定要把它优化掉,根本就不执行
    如果你写成
    1
    for(volatile int i=0; i<100000; i++);
    它就会执行了
     
    volatile对应的变量可能在你的程序本身不知道的情况下发生改变
    比如多线程的程序,共同访问的内存当中,多个程序都可以操纵这个变量
    你自己的程序,是无法判定何时这个变量会发生变化
    还比如,他和一个外部设备的某个状态对应,当外部设备发生操作的时候,通过驱动程序和中断事件,系统改变了这个变量的数值,而你的程序并不知道。
     
    对于volatile类型的变量,系统每次用到他的时候都是直接从对应的内存当中提取,而不会利用cache当中的原有数值,以适应它的未知何时会发生的变化,系统对这种变量的处理不会做优化——显然也是因为它的数值随时都可能变化的情况。
     
     
  • 相关阅读:
    解析Javascript事件冒泡机制
    LeetCode——Flatten Binary Tree to Linked List
    流动python
    HDU2586
    Cannot find ActionMappings or ActionFormBeans collection
    reactor设计模式
    简单的Ajax应用实例
    CString——Left、Right、Find、ReverseFind
    MATLAB新手教程
    八大排序算法总结
  • 原文地址:https://www.cnblogs.com/locean/p/4900678.html
Copyright © 2011-2022 走看看