volatile关键字 C++与Java的区别

本文探讨了volatile关键字在Java和C++中的作用。在Java中,volatile确保内存可见性和禁止指令重排序,但不保证线程间的相对顺序。而在C++中,volatile意味着易变、不可优化及部分顺序性,需要程序员额外注意多线程下的使用。为达到Java中volatile的效果,C++程序员可能需要借助内存屏障。
摘要由CSDN通过智能技术生成
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有三个性质:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值