ReaderWriterLockSlim卡在TryEnterReadLock上

时间:2017-09-27 12:19:18

标签: c# readerwriterlockslim

我有以下代码:

    private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();

    private void TryGetReadLock()
    {
        if (!Locker.IsWriteLockHeld && !Locker.IsReadLockHeld)
            Locker.TryEnterReadLock(WaitTimeout);
    }

Locker.TryEnterReadLock次超时。如果我在超时之前停止调试器,则Locker.IsWriteLockHeldLocker.IsReadLockHeld都为false

问题:为什么TryEnterReadLock会在这种特殊情况下等待?

[编辑] 实际上,正如评论中所示,我在检查if条件和输入if块之间锁定。因此,我尝试删除if并仅留下Locker.TryEnterReadLock(WaitTimeout);,但收到以下错误:

  

附加信息:写入时可能无法获取读锁定   在这种模式下锁定。

确实其他一些线程有写锁(Locker.IsWriteLockHeld = true)。

我想要的是在一个线程具有写锁定时获得经典lock锁定,即让线程等到一个完成,但是我找不到一种方法来执行它。

0 个答案:

没有答案