你的位置:首页 > ASP.net教程

[ASP.net教程]异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁


返回目录

在System.Threading.Tasks命名空间下,使用ReaderWriterLockSlim对象来实现多线程并发时的锁管理,它比lock来说,性能更好,也并合理,我们都知道lock可以对代码块进行锁定,当多线程共同访问代码时,只能有一个线程去访问它,其它线程被阻塞,这对于写操作是必须的,但对于读操作来说,就有些浪费资源了,因为我们的读操作应该是共享的,多个线程可以现时去读它,这就引出了ReaderWriterLockSlim对象,用它来实现共享锁和互斥锁!

声明一个读写锁

 private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();

EnterReadLock和ExitReadLock-共享锁

当一个线程使用共享锁时,其它线程同样了可以访问这个资源,共用这个锁对象

 rwLock.EnterReadLock(); Console.WriteLine(DateTime.Now.ToLongTimeString() + "线程{0}读到了数据", Thread.CurrentThread.ManagedThreadId); Thread.Sleep(10000); rwLock.ExitReadLock();

EnterWriteLock和ExitWriteLock-互斥锁

当一个线程使用互斥锁时,其它线程将被阻塞,直到这个线程释放锁(ExitWriteLock)为止

 rwLock.EnterWriteLock(); Console.WriteLine(DateTime.Now.ToLongTimeString() + "线程{0}写了数据{1}", Thread.CurrentThread.ManagedThreadId, res); Thread.Sleep(10000); rwLock.ExitWriteLock();

我们在测试时,可以模式多个并发的线程,去调用同一个加锁的代码,然后看一个它们执行的时间即可

      //多线程的并行      Parallel.Invoke(() =>      {        TestReadWrite("1");      }, () =>      {        TestReadWrite("2");      }, () =>      {        TestReadWrite("3");      });

执行的结果

海岛旅游费用多少海岛旅游哪里好玩海岛旅游行程深圳到海岛旅游深圳去海岛旅游报价正月游天津 古文化街民俗游必不可少 厦门赏花攻略 灌口镇长春谷、同安云顶山 南沙水鸟世界简介?广州南沙水鸟世界介绍? 厦门赏花攻略 园博苑、植物园 《心花路放》火了大理 游客多了花费少了 《大话西游》重登影院 跟着热映电影去旅行 深圳东部华侨城在哪?门票多少? 一座城一个人 行走在边境线的旅行 中秋节去紫莲度假村有什么好玩的?潮州紫莲度假村晚上玩什么? 紫莲森林度假村9月有什么活动?潮州紫莲森林度假村游玩攻略? 紫莲森林度假村首届推广月活动时间?潮州紫莲森林度假村推广月活动攻略? 潮州紫莲度假村网站?紫莲度假村最新活动有哪些? 清新县古龙峡国际漂流怎么样?古龙峡国际漂流攻略? 天津卫视真人秀栏目 十月下旬达古冰山开拍 珠海梦幻水城学生价格?梦幻水城优惠区域包含学生证吗? 阳朔菩萨水岩小孩多高免费?菩萨水岩儿童票价格? Q65110A7955 Datasheet Q65110A7955 Datasheet Q65110A7980 Datasheet Q65110A7980 Datasheet Q65110A7987 Datasheet Q65110A7987 Datasheet 天涯海角图片 天涯海角图片 天涯海角图片 北京好吃的地方 北京好吃的地方 北京好吃的地方 特呈岛 特呈岛 特呈岛