1

我有以下代码:

    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当一个线程具有写锁时获得经典锁定,即让线程等到它完成,但我找不到方法来做到这一点。

4

0 回答 0