返回目录

在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();
rwLock.ExitReadLock();

EnterWriteLock和ExitWriteLock-互斥锁

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

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

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

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

执行的结果

aaarticlea/png;base64,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" alt="" />

我们可以看到,共享锁在被访问时,几个线程是同时的;而互斥锁在使用时,则出现了线程之间的等待(阻塞)!

感谢各位的阅读!

返回目录

异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁的更多相关文章

  1. 【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况

    异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { ...

  2. F# 天生就是就异步和并行的料

    做模型开发免不了要使用异步和并行计算,尤其在多核CPU的今天,更是如此,F#恰逢其时,天生就具备这种能力,先看一个例子. open System open System.Drawing open Sy ...

  3. iOS:转载:同步、异步、并行、串行的详解

    理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21 ...

  4. swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端

    近半年来努力付出,项目终于要正式结项了,团队4人经历了很多困难,加班加点,最终完成了!剩下的时间将总结一下在该项目中用到知识和遇到问题.今天就从swoole说起!项目中实现异步大文件传输的功能,在服务 ...

  5. [数据库事务与锁]详解六: MySQL中的共享锁与排他锁

    注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大 ...

  6. 共享锁【S锁】 排他锁【X锁】

    排它锁又称为写锁((eXclusive lock,简记为X锁)),若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁.它防止任何其它事务获 ...

  7. 共享锁(S锁)和排它锁(X锁)

    1 什么叫数据库共享锁[S]锁和[X]锁 共享锁[S锁]    又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁.这保 ...

  8. node源码详解(七) —— 文件异步io、线程池【互斥锁、条件变量、管道、事件对象】

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource7 本博客同步在https://cnodejs.o ...

  9. mysql共享锁与排他锁

    mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能 ...

随机推荐

  1. 【腾讯Bugly干货分享】打造“微信小程序”组件化开发框架

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2nQzsuqq7Avgs8wsRizUhw 作者:Gc ...

  2. 剑指Offer面试题:8.斐波那契数列

    一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...

  3. 【转】我的技术学习方法 — Anytao

    原文作者:anytao—王涛 他的著作:<你必须知道的.Net> 关于这个问题,也有不少刚刚入行的朋友向我问起.我想可能一千个人就有一千个答案,我不能保证自己的想法适合于所有的人,但是这确 ...

  4. [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

    [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...

  5. jQuery编程的最佳实践

    好像是feedly订阅里看到的文章,读完后觉得非常不错,译之备用,多看受益. 加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN ...

  6. PowerDesigner成功生成PDM进行check model后的错误提示解决途径

    1.existence of reference join------->缺少主键; 2.constraint name uniquesness-------->关联约束重名(refere ...

  7. 每天多一点(2016.12.04)》Javascript隐式转换

    乱想 javascript为什么需要隐式转换?如果没有会出现什么情况? 找了一圈没有看到关于这个的讨论,只好自己研究了,可能不一定正确,自行辨知. 郁闷就是郁闷在好好的,为什么要搞个隐式转换,一般来讲 ...

  8. Windows下搭建MySQL Master Slave

    一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用keepalived这个HA工具,但是我们可以接受人工进行切 ...

  9. WPF绘制折线

    WPF后台绘制折线,填充到一个GRID下 private void btnPreview_Click(object sender, RoutedEventArgs e) { GridImg.Child ...

  10. [汇编与C语言关系]5. volatile限定符

    现在研究一下编译器优化会对生成的指令产生什么影响,在此基础上介绍C语言的volatile限定符.首先看下面的C程序: /* artificial device registers */ unsigne ...