当前位置: 首页 > news >正文

河南第一火电建设公司网站营销网站建设套餐

河南第一火电建设公司网站,营销网站建设套餐,wordpress速度加快,中国最大的电商平台是哪家前面实现了一个 带值变更通知能力的字典类(线程不安全)#xff0c;童鞋们有没有发现演示代码使用了 lock语法糖#xff0c; 这个有没有问题呢#xff1f;没背景说个铲铲同程艺龙基础架构部推出的数据获取组件DAL.Connection#xff0c;我们要做到在切换连接配置时清空数据库… 前面实现了一个 带值变更通知能力的字典类(线程不安全)童鞋们有没有发现演示代码使用了 lock语法糖 这个有没有问题呢没背景说个铲铲      同程艺龙基础架构部推出的数据获取组件DAL.Connection我们要做到在切换连接配置时清空数据库连接池, 这就涉及到切换连接的时候触发变更通知。•.NET 如何清空连接池•面试官实现一个带值变更通知能力的Dictionary仔细阅读《面试官实现一个带值变更通知能力的Dictionary》一文的童靴们有没有发现一个细节我使用了lock语法糖无脑加锁。这里面有个前置知识点C# Dictionary线程不安全。什么叫线程不安全请看这个✍️ 你管这叫线程安全?       这在高并发下会有问题大多数时候下DBA并不会变更业务方的数据库连接这是一个多读少写的场景 我们无脑使用lock在多数时间会人为阻塞请求。到这个时候我们就要想到读写锁ReaderWriterLockSlim。宝藏好物ReaderWriterLockSlimUse ReaderWriterLockSlim to protect a resource that is read by multiple threads and written to by one thread at a time. ReaderWriterLockSlim allows multiple threads to be in read mode, allows one thread to be in write mode with exclusive ownership of the lock, and allows one thread that has read access to be in upgradeable read mode, from which the thread can upgrade to write mode without having to relinquish its read access to the resource.简而言之ReaderWriterLockSlim提供对某资源在某时刻下的多线程同读 或 单线程独占写。此外ReaderWriterLockSlim还提供从读模式无缝升级到独占写模式。总结下来读写锁处于以下四种状态1.未进入: 没有线程进入锁(或者所有线程退出锁)2.读模式每次调用EnterReadlock时锁计数都会增加但允许您读取其中的代码块。3.写模式独占、排他4.可升级的读模式(upgradeable read mode)多线程读其中一个线程具备在某时刻升级到排他写模式的可能。btw读写锁相比常规lock之外还具备锁超时的机制能避免未知原因持续占有锁导致的死锁。这就很适合我们开发DAL.Connection组件的多读少写的场景。 微软ReaderWriterLockSlim页面还很贴心的给了一个基于读写锁的缓存操作封装类SynchronizedCache。开箱即用的缓存操作类基于ReaderWriterLockSlim对线程不安全的Dictionary进行了包装 可以作为一个多读少写的缓存操作类。public class SynchronizedCache  {private ReaderWriterLockSlim cacheLock  new ReaderWriterLockSlim();private Dictionaryint, string innerCache  new Dictionaryint, string();public int Count{ get { return innerCache.Count; } }public string Read(int key){cacheLock.EnterReadLock();try{return innerCache[key];}finally{cacheLock.ExitReadLock();}}public void Add(int key, string value){cacheLock.EnterWriteLock();try{innerCache.Add(key, value);}finally{cacheLock.ExitWriteLock();}}public bool AddWithTimeout(int key, string value, int timeout){if (cacheLock.TryEnterWriteLock(timeout)){try{innerCache.Add(key, value);}finally{cacheLock.ExitWriteLock();}return true;}else{return false;}}public AddOrUpdateStatus AddOrUpdate(int key, string value){cacheLock.EnterUpgradeableReadLock();try{string result  null;if (innerCache.TryGetValue(key, out result)){if (result  value){return AddOrUpdateStatus.Unchanged;}else{cacheLock.EnterWriteLock();try{innerCache[key]  value;}finally{cacheLock.ExitWriteLock();}return AddOrUpdateStatus.Updated;}}else{cacheLock.EnterWriteLock();try{innerCache.Add(key, value);}finally{cacheLock.ExitWriteLock();}return AddOrUpdateStatus.Added;}}finally{cacheLock.ExitUpgradeableReadLock();}}public void Delete(int key){cacheLock.EnterWriteLock();try{innerCache.Remove(key);}finally{cacheLock.ExitWriteLock();}}public enum AddOrUpdateStatus{Added,Updated,Unchanged};~SynchronizedCache(){if (cacheLock ! null) cacheLock.Dispose();} } 缓存操作类SynchronizedCache每次操作会返回操作结果和常见的字典一样不带值变更通知的能力我们还是像《面试官实现一个带值变更通知能力的Dictionary》 一文那样添加值变更事件注册变更逻辑。public event EventHandlerValueChangedEventArgsstring OnValueChanged;//--- 节选自AddOrUpdate方法 cacheLock.EnterWriteLock(); try {OnValueChanged?.Invoke(this, new ValueChangedEventArgsstring(key));innerCache[key]  value; } finally {cacheLock.ExitWriteLock(); } return AddOrUpdateStatus.Updated;//---if (sc.AddOrUpdate(key, value)  SynchronizedCache.AddOrUpdateStatus.Updated) {Console.WriteLine($已经发生了值变更原key对应的键值已经被重写。);} }   输出旁白      本文记录了读写锁在日常开发中的实践大多数场景都是多读少写读者可以思考一下是不是也可以将项目中的无脑lock替换为SynchronizedCache。      本文是同程艺龙DAL.Connection组件研发过程的一个小插曲有心的读者可以往上翻一翻了解上下文背景、了解小码甲的思考过程。这就像我们高中做数学题直接看答案并不能快速提升结合上下文自然、流畅的转到这个方向才是最重要的。最后觉得有用一键三连激浊扬清❤️。目前100000人已关注加入我们
http://www.sadfv.cn/news/344997/

相关文章:

  • 常州承接网站建设求个网站2021可用
  • 坪山网站建设效果怎么制作外贸网站模板
  • 网站别人做的上面有方正字体建站工具免费
  • 用jsp做一网站的流程东莞建设网住房保障专栏
  • 浙江省住房与城乡建设厅网站怎么切图做网站
  • 利用php做网站教程中山模板建站公司
  • 泉州专业网站建设哪家好上海住房和城乡建设局网站
  • 有了域名 怎么做网站为企业做贡献
  • 网站建设这一行业怎样网站设计公司发展
  • 做企业网站 长春wordpress自助
  • 建站魔方极速网站建设做词云的在线网站
  • 响应式网站开发的Wordpress写文章刷不开
  • 运涛网站建设自创游戏的软件
  • 做网站的女生多么福建省最新消息今天
  • 北京做网站好的公司南京谷歌优化
  • 张家港普通网站建设花钱做网站需要所有权
  • 南宁做网站哪家公司好学院网站建设项目范围变更申请表
  • 外国设计网站wordpress可视化对比
  • 厦门国外网站建设公司哪家好郑州市经开区建设局网站
  • h5 高端网站建设金华网站制作建设
  • 珠海市城乡住房建设局网站宜宾建设网站
  • 湖南网站制作流程网站是怎么做的
  • 湖北省建设人力资源网站快速进入网站
  • 安康微网站建设企业网是什么意思
  • 商业设计网站微网站免费开发平台
  • 海沧建设网站多少钱个人做外贸怎样起步
  • 做下载网站挣钱吗wordpress静态化
  • 做网站图片切图是什么最好的网站推广软件
  • 网站页面设计公司电话购物网站建设代理商
  • 广汉有没有做网站建设公司校园网站建设培训体会