技术开发 频道

微软VS2007推出新读写锁机制

   【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的这种改变不会影响大部分应用程序。

0
相关文章