ReaderWriterLockSlim 类

ReaderWriterLockSlim 类支持三种锁定模式:Read,Write,UpgradeableRead。这三种模式对应的方法分别是 EnterReadLock,EnterWriteLock,EnterUpgradeableReadLock 。再就是与此对应的 TryEnterReadLock,TryEnterWriteLock,TryEnterUpgradeableReadLock,ExitReadLock,ExitWriteLock,ExitUpgradeableReadLock。Read 和 Writer 锁定模式比较简单易懂:Read 模式是典型的共享锁定模式,任意数量的线程都可以在该模式下同时获得锁;Writer 模式则是互斥模式,在该模式下只允许一个线程进入该锁。UpgradeableRead 锁定模式可能对于大多数人来说比较新鲜,但是在数据库领域却众所周知。

这个新的读写锁类性能跟 Monitor 类大致相当,大概在 Monitor 类的 2 倍之内。而且新锁优先让写线程获得锁,因为写操作的频率远小于读操作。通常这会导致更好的可伸缩性。起初,ReaderWriterLockSlim 类在设计时考虑到相当多的情况。比如在早期 CTP 的代码还提供了PrefersReaders, PrefersWritersAndUpgrades 和 Fifo 等竞争策略。但是这些策略虽然添加起来非常简单,但是会导致情况非常的复杂。所以 Microsoft 最后决定提供一个能够在大多数情况下良好工作的简单模型。

#线程可以进入三种锁定模式:读取模式、写入模式和可升级的读取模式。

#可升级模式适用于线程通常读取受保护资源的内容,但在某些条件满足时可能需要写入的情况。使用可升级锁可以方便的从读锁中升级为写锁,而不需要进行切换,以增加损耗。

# 平时不要把ReaderWriterLockSlim的实例放到try{}块中,以减少性能损耗。

例如:

public class ReaderWriterLockSlimSample
{
    private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();     private object Get()
    {
        object obj = null;
        if (rwLock.TryEnterReadLock(100))
        {
            try
            {
                //写操作
                obj = new object();
                return obj;
            }
            finally
            {
                rwLock.ExitReadLock();
            }
        }
        return null;
    }
    private void Add()
    {
        if (rwLock.TryEnterWriteLock(100))
        {
            try
            {
                //写操作
            }
            finally
            {
                rwLock.ExitWriteLock();
            }
        }
    }
    public void Update()
    {
        if (rwLock.TryEnterUpgradeableReadLock(100))
        {
            try
            {
                //读操作
                rwLock.EnterWriteLock();
                try
                {
                    //写操作
                }
                finally
                {
                    rwLock.ExitWriteLock();
                }
            }
            finally
            {
                rwLock.ExitUpgradeableReadLock();
            }
        }     }
}
转:http://www.cnblogs.com/lucifer1982/archive/2008/12/07/1349437.html
相关资料 1。http://www.cnblogs.com/JeffreyZhao/archive/2009/11/12/concurrent-cache-performance-improvement-1-immutable-hash-table.html
2.http://blog.csdn.net/deng375235329/archive/2009/11/24/4864546.aspx

最新文章

  1. Eclipse 常用快捷键
  2. 基础小功能之(1)震动,(2)检测app是否在前台运行
  3. POJ 3259 Wormholes (最短路)
  4. 谷歌上不了?hoststool一键搞定host 支持在线更新
  5. 支持向量机通俗导论(理解SVM的三层境地)
  6. 中国还是和AMD走到一起了 但美国会高兴吗(网易科技 卢鑫)
  7. redhat6.3 jfreechar中文乱码解决途径
  8. Linux中SVN的备份与恢复
  9. C++ 用三元组表示法存储稀疏矩阵
  10. Loadrunner与idea编写加密的java Vusers脚本总结
  11. Spring Boot 简介
  12. SQL Script
  13. requests库入门11-重定向和请求历史
  14. webapp js与安卓,ios怎么交互
  15. 转载:gc的概念,如果A和B对象循环引用,是否可以被GC?
  16. TMS WEB Core v1.2预览版:新的Electron应用程序支持
  17. TextBox Ctrl+A不能全选的问题
  18. echarts中关于自定义legend图例文字
  19. 第1章 1.2计算机网络概述--Intenet和广域网
  20. JDBC的批量插入操作

热门文章

  1. LeetCode OJ 96. Unique Binary Search Trees
  2. LVS负载均衡的三种模式和八种算法总结
  3. 获取输入设备的vid和pid
  4. yum no key
  5. AVFoundation(二)---MPMusicPlayerController
  6. STM32F10x_模拟I2C读写_硬件I2C读写
  7. DISUBSTR - Distinct Substrings
  8. opencv---cvor
  9. CodeForces 566B Replicating Processes
  10. JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能