并发数据(锁)ReaderWriterLockSlim
2010-05-21 10:59
387 查看
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();
}
}
}
}
转:/article/5158425.html
相关资料 1。/article/4583226.html
2.http://blog.csdn.net/deng375235329/archive/2009/11/24/4864546.aspx
相关文章推荐
- 并发数据(锁)ReaderWriterLockSlim
- 并发数据(锁)ReaderWriterLockSlim
- 并发数据(锁)ReaderWriterLockSlim
- 混合线程同步核心篇——自定义混合同步锁,Monitor,lock,ReaderWriterLockSlim・・・
- 多线程中的锁系统(二)-volatile、Interlocked、ReaderWriterLockSlim
- 封装ReaderWriterLockSlim
- ReaderWriterLockSlim使用注意事项
- 多线程下Lock、Level-Lock、Lock-Free、ReaderWriterLock、ReaderWriterLockSlim性能比较
- ReaderWriterLockSlim
- 异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁
- C# ReaderWriterLockSlim 实现
- ReaderWriterLock和ReaderWriterLockSlim
- .NET 同步与异步之锁(ReaderWriterLockSlim)(八)
- C#读写锁ReaderWriterLockSlim的使用
- 让C#轻松实现读写锁分离--封装ReaderWriterLockSlim
- 让C#轻松实现读写锁分离--封装ReaderWriterLockSlim
- ReaderWriterLockSlim 类
- 第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)
- 封装ReaderWriterLockSlim
- 同步ReaderWriterLockSlim