C# 之 volatile关键字解析
发布日期:2021-06-29 19:10:03
浏览次数:2
分类:技术文章
本文共 1591 字,大约阅读时间需要 5 分钟。
C# 之 volatile关键字解析
一,概念解释
volatile 关键字指示一个字段可以由多个同时执行的线程修改。
出于性能原因,编译器,运行时系统甚至硬件都可能重新排列对存储器位置的读取和写入。 声明了 volatile 的字段不进行这些优化。
添加 volatile 修饰符可确保所有线程观察易失性写入操作(由任何其他线程执行)时的观察顺序与写入操作的执行顺序一致。 不确保从所有执行线程整体来看时所有易失性写入操作均按执行顺序排序。
二,修饰类型
volatile 关键字可修饰于以下类型的字段:
- 引用类型。
- 简单类型,如sbyte、byte、short、ushort、int、uint、char、float 和 bool。
- 具有以下基本类型之一的 enum 类型:byte、sbyte、short、ushort、int 或 uint。
- 已知为引用类型的泛型类型参数。
- IntPtr 和 UIntPtr。
其他类型(包括 double 和 long)无法标记为 volatile,因为对这些类型的字段的读取和写入不能保证是原子的。 若要保护对这些类型字段的多线程访问,可使用 Interlocked 类成员或使用 lock 语句保护访问权限。
volatile 关键字只能应用于 class 或 struct 的字段。 并且不能将局部变量声明为 volatile。
三,实际运用
通常情况下我们是这样使用单例模式的,代码如下:
////// 单例/// class Singleton{ private static Singleton _ins; public static Singleton Instance { get { if (_ins == null) { _ins = new Singleton(); } return _ins; } } // 私有化构造 private Singleton() { }}
若我们程序需要在多线程中执行时,上面这种写法就可能会有问题,一种极限情况就是,两个线程同时进入if (_ins == null)
时,此时会new 两个对象出来,这显然违背了我们使用单例模式的意愿,进而优化出来下面这种单例写法,在多线程中使用
////// 多线程单例 /// class SingletonThread { private static volatile SingletonThread _ins; private static object lockHelper = new Object { }; public static SingletonThread Instance { get { if(_ins == null) { lock (lockHelper) { if(_ins == null) _ins = new SingletonThread(); } } return _ins; } } // 私有化构造 private SingletonThread() { }}
转载地址:https://czhenya.blog.csdn.net/article/details/110532542 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月23日 00时55分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
弘辽科技:现在怎么做淘宝赚钱?有什么办法或者方案用淘宝赚钱?
2019-04-30
弘辽科技:拼多多店铺星级多久更新一次?如何提升?
2019-04-30
弘辽科技:拼多多店铺星级有用吗?什么是星级?
2019-04-30
弘辽科技:拼多多客单价怎么算?如何提高?
2019-04-30
弘辽科技:拼多多商品详情图怎么做?有什么开店技巧?
2019-04-30
弘辽科技:618收官战报:直播电商强势入场,国潮成消费新趋势
2019-04-30
弘辽科技:宝妈适合做什么?适合宝妈的25个副业
2019-04-30
弘辽科技:老店新开没有自然流量怎么办?
2019-04-30
弘辽科技:拼多多小额收款多久到账?有些什么限制呢?
2019-04-30
弘辽科技:上班同时还能开什么店?上班做副业项目
2019-04-30
弘辽科技:徒有贵族身份,却连一分钱都没有。
2019-04-30
弘辽科技:零食市场内卷化 洽洽的功守道
2019-04-30
弘辽科技:什么行业适合夫妻店?适合夫妻开的店
2019-04-30
弘辽科技:淘宝保险保证金怎么开通?它和消保保证金有什么区别?
2019-04-30
弘辽科技:淘宝开店后怎么经营?步骤有哪些?
2019-04-30
弘辽科技:淘宝开店会有人主动联系吗?怎么才会有人买?
2019-04-30
从零开始搭建免费小程序商城
2019-04-30
如何快速创建个人网站
2019-04-30
立即拥有自己的商城APP,这个功能简直了
2019-04-30
黑科技!无需代码快速搭建网站的平台来了
2019-04-30