• volatile关键字 Sk8er


    在程序执行的时候有可能遇到动态调度指令的问题,例如解决CPU的数据相关问题,就有可能将不相干的指令交换顺序,这在单线程没有问题,但是在多线程中就有可能出现问题。

    例如:

    x = y = 0;

    thread1()        thread2()

    {            {

      x = 1;          y = 1;

      r1 = y;          r2 = x;

    }            }

    有可能被CPU优化成:

    thread1()        thread2()

    {            {

      r1 = y;          r2 = x;

      x = 1;          y = 1;

    }            }

     若这两个线程并发执行就会造成r1 = r2 = 0的情况。

    解决办法就是使用volatile关键字来阻止过度优化。

    volatile关键字有两个功能:

    1. 阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回。

    2. 阻止编译器调整操作volatile变量的指令顺序。

    但是这种做法只能阻止编译器调整顺序,对于CPU动态调换指令顺序就没有办法阻止了。

  • 相关阅读:
    必须了解的经典排序算法整理
    浅谈Code Review
    NOIP2018提高组省一冲奖班模测训练(六)
    NOIP2018提高组省一冲奖班模测训练(五)
    NOIP2018提高组金牌训练营——动态规划专题
    poj 3074
    搜索中的剪枝
    bitset骚操作
    NOIP 2017 宝藏
    prim求最小生成树
  • 原文地址:https://www.cnblogs.com/f8915345/p/3085673.html
Copyright © 2020-2023  润新知