zoukankan      html  css  js  c++  java
  • 让DotNet2.0使用高性能的读写锁

    摘要:做线程同步的时候一般都用Monitor对象或者lock关键字,其实好多场景是对资源读多写少,这时应该使用读写锁,而.net自带的ReaderWriterLock的性能有问题,于是我把.net 3.0的ReaderWriterLockSlim类给提取出来了。

    关于ReaderWriterLock和ReaderWriterLockSlim的对比,参考如下链接:并发数据结构 : .NET Framework 中提供的读写锁

    当然直接引用.net 3.0的System.Core.dll也可以使用,但那样有些火箭穿蚊子,另外对ReaderWriterLockSlim类的实现原理没仔细看,但我没做重要的改动,就把抛异常的时候从资源文件里读异常的本地化Message的地方换了一个方法。这个类的性能比.net 2.0的好很多,是用Thread.SpinWait和Interlocked.CompareExchange等实现的,代码写的比较诡异,有好多没用到的字段,还有一些从来没有初始化的字段,不知道到底有没有用都,比较汗,把代码贴出来,如下

    using System;
    using System.Runtime.Serialization;
    using System.Security.Permissions;
    using System.Threading;

    namespace System.Threading
    {
        
    LockRecursionPolicy

        
    RecursiveCounts

        
    ReaderWriterCount

        
    LockRecursionException

        
    ReaderWriterLockSlim 
    }

    测试项目见后面下载地址:ReaderWriterLockSlim.zip

  • 相关阅读:
    HDU 1150 Machine Schedule(二分匹配最小点覆盖)
    CodeForces 748F Santa Clauses and a Soccer Championship
    CodeForces 748E Santa Claus and Tangerines(二分)
    CodeForces 748D Santa Claus and a Palindrome (贪心+构造)
    POJ 3657 Haybale Guessing(二分+并查集)
    【JZOJ5773】简单数学题【数论,数学】
    【洛谷P4085】Haybale Feast【分块】
    【洛谷P4085】Haybale Feast【分块】
    【洛谷P4085】Haybale Feast【分块】
    【洛谷P4212】外太空旅行【随机】【贪心】
  • 原文地址:https://www.cnblogs.com/onlytiancai/p/1375023.html
Copyright © 2011-2022 走看看