zoukankan      html  css  js  c++  java
  • 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动态调换指令顺序就没有办法阻止了。

  • 相关阅读:
    iTestin云测试工具
    android 存储操作 大小显示换算 kb mb KB MB 读取
    android 发送短信 判断号码规则 判断字符数70
    android 震动 各种
    10.13总结
    10.8每日总结
    10.9
    10.15
    10.14
    10.12每日总结
  • 原文地址:https://www.cnblogs.com/f8915345/p/3085673.html
Copyright © 2011-2022 走看看