我有以下代码:
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();
private void TryGetReadLock()
{
if (!Locker.IsWriteLockHeld && !Locker.IsReadLockHeld)
Locker.TryEnterReadLock(WaitTimeout);
}
Locker.TryEnterReadLock
超时。如果我在它超时之前停止调试器,Locker.IsWriteLockHeld
两者Locker.IsReadLockHeld
都是false
.
问题:为什么 TryEnterReadLock 在这种特殊情况下会等待?
[编辑]
确实,如评论中所示,我在检查您的 if 条件和进入if
块之间已锁定。所以,我试图删除if
并留下 just Locker.TryEnterReadLock(WaitTimeout);
,但我收到以下错误:
附加信息:在此模式下持有写锁可能无法获取读锁。
事实上,其他一些线程有一个写锁(Locker.IsWriteLockHeld = true
)。
我想要的是lock
当一个线程具有写锁时获得经典锁定,即让线程等到它完成,但我找不到方法来做到这一点。