`
andyou2012
  • 浏览: 8290 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

volatile具有原子性吗??

阅读更多
不卖关子,答案是具有原子性,但是在某些情况下也没有原子性。

1.具有
  准确的说volatile 是具有可见性的,其核心原理是当对volatile标记的变量进行修改时,会将其他缓存的线程中的的变量值清除。当其他缓存中的线程读取此变量值时,会首先向主线程中缓存获取到消息,将新值传给当前线程并赋值。每次变量更新volatile变量时都会重复此步骤。
   所以,从这种意义上来说,入门书籍《Java编程思想》告诉我们。,定义long或double变量时,如果使用volatile关键字,就会获得(简单的赋值与返回操作)原子性。


2.不具有
  但是volatile有个条件,用在getAndOperator场合是不具备原子性的。比如在做n =n+1,n++这种。因为在执行此类操作时有三个步骤:获取,自增,赋值。其jvm指令中,有内存屏障的介入,内存屏障会将已经发生写入的值同步到各个线程内存中。
   因此在此种情况下不具备原子性。
分享到:
评论

相关推荐

    volatile和原子操作有没有关系,我的实验+别人论文

    对volatile的原子性做探究,加上自己的实验代码和实验结果! Case多核?单核?是否有volatile是否编译器优化-O2结果!

    4.4 volatile关键字有什么作用?.rar

    GD32F303各种使用场景代码实现

    线程安全、volatile关键字、原子性、并发包、死锁、线程池.md

    线程安全、volatile关键字、原子性、并发包、死锁、线程池学习笔记

    java代码-volatile原子性

    java代码-volatile原子性

    Java并行(3):可见性重访之锁、Volatile与原子变量1

    1. 过期数据 2. 锁的可见性 4. 原变量 1. JSL 第三版 2. Java Concurrency in Practice

    AVR-GCC 中如何使用volatile 关键字.pdf

    volatile 的字面含义是易变的,那么将一个变量指示为volatile 是什么意思呢?是告诉编 译器这个变量是易变的?事实上也是如此。在多任务、中断等环境下,变量可能被其他的任 务改变,而编译器无法发现,volatile ...

    Java volatile与AQS锁内存可见性

    从JUC中的AQS引入,讲解Java volatile与AQS锁内存可见性

    Volatile详解,深入学习Volatile

    详细说明 并举例说明了VOlatile的作用及用法,特别是嵌入式程序员要注意的

    面试官最爱的volatile关键字.docx

    volatile可以看成是synchronized的一种轻量级的实现,但volatile并不能完全代替synchronized,volatile有synchronized可见性的特性,但没有synchronized原子性的特性。 可见性即用volatile关键字修饰的成员变量表明...

    从汇编角度理解volatile

    一般对于volatile的解释是这样的:将变量定义为volatile可以防止编译器对变量进行优化,每次均从内存中访问变量,而不是寄存器。既然让编译器优化可以提高访问速度,那为什么又要不用它以及什么时候不用它?其实主要...

    volatile变量详解

    容易忽略的变量声明,但是很重要 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.

    C中的volatile用法

    C中的volatile用法 ,以前编程的时候不是很注意这个关键字,后来在AVR使用的时候被搞得一塌糊涂。最后发现是编译器优化造成的

    volatile的使用

    一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量... 另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实

    java volatile 关键字实战

    java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...

    你了解C语言中的关键字volatile吗?

    我们在学习C语言的32个关键字时,大家都不太注意volatile这个关键字,volatile是一个类型修饰符。volatile的中文意思是“易变的”。那么在程序中我们在什么情况下才使用他呢?我们在分析内核时经常看到这个关键字的...

    volatile的用法

    volatile的用法,在写代码正确使用volatile,正确理解volatile的用法,增强代码的健壮性

Global site tag (gtag.js) - Google Analytics