zoukankan      html  css  js  c++  java
  • volatile关键字

    volatile“易变的”

    下面说一种情况:

    short flag;
    void test()
    {
    do1();
    while(flag==0);
    do2();
    }

      这段程序等待flag变为1后去执行do2函数。如果编译器优化过后,可能会把flag读入寄存器,然后每次从寄存器中读flag值。及时其他程序更改了flag,但这里也会不得而知,变成了死循环。

    解决办法就是在flag上声明为 volatile。需要注意的是,没有volatile也可能能正常运行,但是可能修改了编译器的优化级别之后就又不能正常运行了。因此经常会出现debug版本正常,但是

    release版本却不能正常的问题。所以为了安全起见,只要是等待别的程序修改某个变量的话,就加上volatile关键字。

      一般说来,volatile用在如下的几个地方:
    1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
    2、多任务环境下各任务间共享的标志应该加volatile;
    3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

  • 相关阅读:
    Hashmap实现原理
    策略模式
    Google Drive ubuntu
    numix Docky
    Google Drive 和 Dropbox 同步同一个文件夹目录
    sublime text 2
    matlab cell
    liteide
    taglist and nerdtree
    codeblocks
  • 原文地址:https://www.cnblogs.com/luntai/p/6140774.html
Copyright © 2011-2022 走看看