首页 > 其他 > 详细

Volatile介绍

时间:2020-05-25 16:45:23      阅读:47      评论:0      收藏:0      [点我收藏+]

volatile:
线程用到变量时,会将内存中的变量放到cpu寄存器中,如果其他线程修改了内存中的变量,cpu寄存器中的缓存并不会更新,如果我们给变量加了volatile关键字,程序在执行时,不会将此变量放入寄存器中,而是每次用到都从变量读取,这样的话其他线程在修改了这个变量时,当前线程可以获取最新值。

简单来说volatile关键字是告诉c#编译器和JIT编译器,不对volatile标记的字段做任何的缓存。确保字段读取都是最新值。

public volatile Int32 score1 = 1;

 

Volatile能保证线程安全吗?
对于volatile修饰的变量,虚拟机只是保证从主内存加载到线程工作内存的值是最新的,修改后修改的是线程栈中的变量,并没有直接保存到内存中,所以不能保证线程安全。(应该使用Interlocked类操作变量)

调用Thread.MemoryBarrier()方法,可以和volatile起到相同的作用,告诉编译器每次读取变量都从内存读取,不要从cpu寄存器读取

 

 

 

 

Volatile介绍

原文:https://www.cnblogs.com/fanfan-90/p/12957640.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!