【IT168技术新闻】Visual Studio 2007将推出新的读写锁——ReaderWriterLockSlim。这一新读写锁不仅能提高VS的运行速度,而且可以解决VS前几个版本中的一些糟糕的设计缺陷。
众所周知,读写锁(ReaderWriterLock)在一些重入(reentrancy)实例中会被打破,并且具有需要检查读写锁写序列号(WriterSeqNum)的非原子性升级。
为了支持可升级的读锁,ReaderWriterLockSlim拥有一种的新的模式——UpgradeableRead。这个模式中同一时间内只有一个线程,因此线程可以迅速决定这个锁是否应该被升级到到一个写锁(Write lock)或降级到读锁(ReadLock)。如果你降级,可升级的读锁(UpgradeableRead)应该被立即释放。这样做虽然可以解除死锁,但却使锁机制的设计有点繁琐。
默认锁是不可再入的(reentrant),并且企图递归的获取一个具体锁将会导致异常。可重入性(Reentrancy)可以在建设时间——大概一个性能花费时间内被明确的授予。
读锁(Read locks)到写锁(Write locks)的变换是明确禁止的,因为这种变换同样会导致非原子性升级,最终给原始读写锁(ReaderWriterLock)带来麻烦。
但是,ReaderWriterLockSlim仍然是不完美的,在hosted环境下使用它时,同样存在一些严重的可靠性问题。首先,它不参与SQL Server的死锁诊断,因此你不能在被存储过程调用的库中使用它。其次,线程中断和内存溢出异常可能会误用锁甚至会限制(peg)CPU。由于线程中断不应该被乱用,而且严重的内存溢出异常通常都难于修复,因此VS.NET的这种改变不会影响大部分应用程序。