`
standalone
  • 浏览: 613099 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

volatile的含义

    博客分类:
  • c++
 
阅读更多

指一个变量可能随时由于外界地变化而变化
例如有两个线程分别是线程1和线程2
一个全局变量volatile int i = 0;

线程1
执行如下代码
while(i == 0);
printf();
假设线程1执行到 while处,就会反复执行上这条语句

此时线程2执行
i = 1;

线程1就会执行 printf()

若没有指定 int i 为 volatile
则当线程2执行 i = 1;
时,线程1仍然继续执行while语句

也就是说线程1没有感知变量i的变化

这是由于编译器会对代码进行优化,以及将i
变量装入寄存器的原因,当i再内存中的值发生变化时
无法判断在那个寄存器中有该变量的拷贝,而且不能
同步更新该拷贝

因此需要说明该变量为volatile
这样,编译器不会将该变量装入寄存器,而且不会对
涉及该变量的操作进行优化

好了就罗索这些,希望你已经足够清楚了

分享到:
评论

相关推荐

    const和volatile分析

    在此,我们将深入探讨`const`和`volatile`的含义、用法及其在实际编程中的应用。 `const`关键字: 1. `const`的基本概念:`const`用来声明常量,即一旦赋值后就不能改变的变量。它帮助编译器检查代码中是否有尝试...

    嵌入式C语言学习笔记

    本文总结了嵌入式C语言学习笔记的要点,涵盖了运算符优先级、指针的用法、二分法查找、字符串操作、冒泡排序法、寻址方式、存储区域、volatile含义及应用等多个方面。 一、运算符优先级 在C语言中,运算符的优先级...

    volatile详解

    `volatile`的中文含义通常被翻译为“易变的”,但根据描述中的观点,将其理解为“直接存取原始内存地址”更为恰当。这是因为`volatile`主要用于标记那些可能会被外部因素(如其他线程、中断服务程序等)意外改变的...

    volatile使用详解

    3. **硬件寄存器访问**:存储器映射的硬件寄存器通常也需要用 `volatile` 标记,因为每次对它们的读写都可能有不同的含义。 - 示例:在嵌入式系统中,硬件寄存器经常被用作设备控制接口。为了确保每次读写操作都能...

    Java中volatile关键字的含义

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候可以万事大吉。  Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 ...

    volatile,nonatomic和atomic关键字测试

    在iOS和Mac开发中,Objective-C是主要的编程语言,它在定义实例变量或属性时提供了几个关键的修饰符,包括`volatile`、`nonatomic`和`atomic`。这些关键字对于理解多线程环境下的数据同步和内存管理至关重要。本文将...

    C语言 基础试题(C语言).pdf

    20. **volatile含义**: - `volatile`指示变量可能由硬件或其他线程改变,避免编译器进行优化。 此外,还有其他题目涉及的细节: - **匈牙利命名法**:优点是增加代码可读性,但缺点是引入了额外的符号,可能导致...

    C语言 基础试题(C语言).docx

    20. **volatile含义**: `volatile`指示变量的值可能由编译器无法感知的外部因素(如硬件)改变,编译器不应进行优化。 **问答题解析**: 1. **匈牙利命名法**: 优点是增加代码可读性,缺点是引入了额外的符号...

    嵌入式系统和linux工程师面试题.pdf

    20. **volatile含义**:`volatile`告诉编译器变量的值可能在编译器不知情的情况下发生变化,如中断服务程序中的变量。 **问答题部分**: 1. **匈牙利命名法**:优点是增加代码可读性,便于识别变量类型;缺点是...

    单片机-#define XBYTE ((unsigned char volatile xdata *) 0)

    本文将围绕宏定义`#define XBYTE ((unsigned char volatile xdata *) 0)`展开,深入探讨其含义、作用以及应用场景。 #### 宏定义详解 宏定义`#define XBYTE ((unsigned char volatile xdata *) 0)`主要包含以下几...

    嵌入式或LINUX相关研发面试题目

    20. **volatile含义**:volatile告诉编译器变量的值可能会在编译器不知情的情况下改变,如中断服务程序中的变量。 1. **匈牙利命名法**:优点是代码自解释性好,缺点是代码可读性因过长的变量名降低,且不利于跨...

    Volatile的陷阱.pdf

    本文将深入探讨volatile的含义、陷阱及其正确使用方式。 首先,volatile关键字的目的是告诉编译器,某个变量的值可能会在编译器无法察觉的情况下改变,例如由中断服务程序或并行硬件操作更改。这意味着每次访问该...

    (*(volatile_unsigned_int_ *))

    宏定义的具体含义 让我们逐一分析这些宏定义: - **`__REGb(x)`**: 这个宏定义了一个函数,它接受一个参数`x`,返回一个指向`x`地址处的`volatile unsigned char`类型的指针,并通过解引用该指针来获取或设置该...

    ios 面试题整理

    ### iOS面试题知识点详解 #### 1.... const与volatile含义 - **const**:表示变量是只读的,防止意外修改。 - **volatile**:用于指示编译器不要对变量进行优化,保证其值在每次读取时都是最新的。

    探讨C语言中关键字volatile的含义

    这个限定词的含义是向编译器指明变量的内容可能会由于其他程序的修改而变化。通常在程序中申明了一个变量时,编译器会尽量把它存放在通用寄存器中,例如ebx。当CPU把其值放到ebx中后就不会再关心对应内存中的值。若...

    详解C中volatile关键字

    但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化,volatile的字面含义是易变的,它有下面的作用: 1 不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下...

    const和volatile.pdf

    1. `volatile`的含义 `volatile`关键字用来指示变量的值可能在编译器不知情的情况下发生改变,比如由硬件中断、多线程环境中的并发修改或其他不可预见的事件引起。这意味着每次访问`volatile`变量时,编译器都必须从...

    violate java-Java 之 volatile 超级详解

    首先,我们了解`volatile`的基本含义。在Java中,当一个变量被声明为`volatile`时,编译器会确保对该变量的所有读写操作都是原子性的,并且确保所有线程看到的该变量的值是最新的。这意味着,如果一个线程修改了`...

Global site tag (gtag.js) - Google Analytics