volatile到底起什么作用?

 

惭愧的很,这个单词见过很多年,见人用过很多次,却不曾真正了解其本质作用。最近多线程工作多些,才开始重新注意这个关键词。

默认情况下,内存在读写时会同时刷新至缓存、寄存器,那么下次再使用这个变量时,就会从缓存、寄存中读取,加快了速度。但是在多线程时,每个cpu的每个核心有自己的缓存,当改变内存值时,可能其他核心不知道这个改变,仍在使用自己的缓存值,就造成了错误。volatile标记这个内存不会被缓存,从而其他核心使用内存时总是从内存读取,只要内存值被改变,其他核心读取时就是最新值。好处是避免了使用错误值,坏处是降低了速度(但比使用锁快)。可以用来在类似isEnable之类的操作上使用,解决一些轻量级的多线程问题。这类场景中isEnable的值的改变不依赖旧值,只适用于

isEnable=true;

isEnable=false;

不适用于

isEnable=!isEnable;

不能用来做计数器,因为计数器是依赖旧值的

count=count+1;

 

 

 

 

转载于:https://www.cnblogs.com/devourer/p/3248779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值