当前位置:首页 > 英文周记 > 正文内容

volatile「volatile为什么不能保证原子性」

更新时间:2026-07-18 12:52:22 周记网3年前 (2023-03-17)英文周记129

volatile关键字的作用是什么?

volatile在Java并发编程中常用于保持内存可见性和防止指令重排序。

内存可见性(MemoryVisibility):所有线程都能看到共享内存的最新状态。

volatile「volatile为什么不能保证原子性」

防止指令重排:在基于偏序关系的Happens-Before内存模型中,指令重排技术大大提高了程序执行效率,但同时也引入了一些问题。

volatile保持内存可见性的特殊规则:read、load、use动作必须连续出现;assign、store、write动作必须连续出现;每次读取前必须先从主内存刷新最新的值。

每次写入后必须立即同步回主内存当中。也就是说,volatile关键字修饰的变量看到的随时是自己的最新值。在线程1中对变量v的最新修改,对线程2是可见的。

volatile防止指令重排的策略:在每个volatile写操作的前面插入一个StoreStore屏障;在每个volatile写操作的后面插入一个StoreLoad屏障。

在每个volatile读操作的后面插入一个LoadLoad屏障;在每个volatile读操作的后面插入一个LoadStore屏障。注意:只有在Happens-Before内存模型中才会出现这样的指令重排序问题。

c语言volatile是什么意思

volatile的本意是“易变的”,volatile定义的变量它的值在编译时是会改变的,跟const相反,而const定义的变量一直不会变的,如果变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)。

volatile怎么读

volatile的读音为:[ˈvɒlətaɪl]。

volatile是一个特征修饰符(type specifier)。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量神渣型可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。

如果在定义变量的时候没有赋初始值,则给变量一次存值的机会(因为变量是在栈内存空间内,没有默认值)。

一旦变量被存储了一个值,若是final修饰的,则不让再次改变。注意修饰的变量类型是基本类型还是引用类型:如果修饰的变量是局部数据类型,则变量内的值不让更改—常量。

双语例句:

1、There have been riots before and the situation is volatile.

以前曾发生过暴乱,现在局势不太稳定。

2、It's thought that the blast occurred when volatile chemicals exploded.

人们认为,易挥发的化学物质爆炸时产生了冲击波。

3、Armed soldiers guard the streets in this volatile atmosphere.

目前局势动荡不定,有武装士兵在街道上警戒。

4、First McNeil had to cool down the volatile Australian 20-year old.

首先麦克尼尔得让那个脾气暴躁的20岁澳大利亚小伙子冷静下来。

5、He accompanied the volatile actress to Hollywood the following year.

第二年他陪着这位情绪无常的女演员去了好莱坞。

java里面volatile是什么意思?

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

就跟C中的一样 禁止编译器进行优化~~~~

标签: volatile

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。