zoukankan      html  css  js  c++  java
  • C语言volatile关键字的用法

    volatile关键字的意义在于让被关键字修饰的变量每次使用时都重新去主内存里读取变量,而不是从高速缓存去读取。

        int a = 1;

    普通变量定义之后,若要使用它,都会

        先把它的值从主内存拷贝到高速缓存中
        每次使用都去读高速缓存
        运算完毕再把值刷新回主内存

    这样可以提高效率。

    但多线程同时工作时

    线程1

        int a = 1;

        a = a + 1;

    线程2

        a = a + 1;

     我们希望两个线程运行完结果是3,但是由于a = a + 1运行在两个不同的核上,所以可能存在一种情况,当线程1刚执行完把a = 1拷贝到高速缓存时,线程1执行a = a + 1,还没有刷新回主内存时,线程2也开始执行a = a + 1,这时线程2从高速缓存取出的a的值还没有修改,为1,所以两个线程执行完结果为2。

    为了避免这种情况,可以在定义变量时用volatile修饰

        volatile int a = 1;

    但由于每次都去主内存读数据,会导致效率降低。一般volatile关键字在中断中经常出现。
    ---------------------
    作者:wssjn1994
    来源:CSDN
    原文:https://blog.csdn.net/wssjn1994/article/details/83056077
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    arduino入门学习实现语音控制LED灯
    c# 实现串口编程-操作LED屏幕
    腾讯地图 获取各种情况的总距离
    js播放wav文件,兼容主流浏览器,兼容多浏览器
    工厂方法模式
    依赖倒转模式
    设计模式——开放封闭原则
    设计模式——单一职责原则
    策略模式
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/shelley-AL/p/10724724.html
Copyright © 2011-2022 走看看