volatile
volatile这个单词在英文之中的意思是:易变的,不稳定的的含义。
Java volatile
在Java中有volatile关键字,Java之中volatile的作用是:
-
确保内存可见性:读写变量具有全局有序性,保证当前线程读到的值是内存中最新的,而不是当前线程中缓存中的值。但是volatile关键字并不保证线程读写变量的相对顺序,所以适用场景有限。
-
禁止指令重排序(happens-before原则):指令重排序是JVM为了提高运行程序的效率,在不影响单线程执行结果的前提下,对指令的执行过程进行优化。注意是单线程,多线程下指令重排序就可能会影响结果。
注意Java的有序性是指:
- 在当前线程读写操作前的修改操作的值对当前操作可见。
- 在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。
C++ volatile
A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided.
C++中的volatile有三个性质:
- 易变的
- 不可优化的
- 顺序性
volatile相当于显式的要求编译器禁止对 volatile 变量进行优化,并且要求每个变量赋值时,需要显式从寄存器%eax拷贝。vo

本文探讨了volatile关键字在Java和C++中的作用。在Java中,volatile确保内存可见性和禁止指令重排序,但不保证线程间的相对顺序。而在C++中,volatile意味着易变、不可优化及部分顺序性,需要程序员额外注意多线程下的使用。为达到Java中volatile的效果,C++程序员可能需要借助内存屏障。

330

被折叠的 条评论
为什么被折叠?



