zoukankan      html  css  js  c++  java
  • Volatile变量

    在程序设计中,尤其是在C语言、C++、C#和Java语言中,使用volatile关键字声明的变量或对象通常具有与优化、多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器认为的无法“被代码本身”改变的代码(变量/对象)进行优化。如在C语言中,volatile关键字可以用来提醒编译器它后面所定义的变量随时有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

    临界区内部,通过互斥锁(mutex)保证只有一个线程可以访问,因此临界区内的变量不需要是volatile的;而在临界区外部,被多个线程访问的变量应为volatile,这也符合了volatile的原意:防止编译器缓存(cache)了被多个线程并发用到的变量。volatile对象只能调用volatile成员函数,这意味着应仅对多线程并发安全的成员函数加volatile修饰,这种volatile成员函数可自由用于多线程并发或者重入而不必使用临界区;非volatile的成员函数意味着单线程环境,只应在临界区内调用。在多线程编程中可以令该数据对象的所有成员函数均为普通的非volatile修饰,从而保证了仅在进入临界区(即获得了互斥锁)后把该对象显式转为普通对象之后才能调用该数据对象的成员函数。这种用法避免了编程者的失误——在临界区以外访问共享对象的内容

  • 相关阅读:
    A16 React+AntDesign AntDesignUI框架初识
    A15 React+AntDesign 路由模块化 嵌套路由父子组件传值
    A14 React+AntDesign 路由嵌套
    react中实现JavaScript跳转路由
    react打包 npm run build 出现空白页面
    在react中解析html标签代码
    es6 模板字符串 在字符串里写变量
    A13 React+AntDesign 路由配置 react-router5.1.2
    nginx动态配置,环境安装
    Spring配置文件内容加密
  • 原文地址:https://www.cnblogs.com/linyx/p/7116175.html
Copyright © 2011-2022 走看看