ReaderWriterLock允许饥饿

时间:2015-04-07 09:12:07

标签: c# .net readerwriterlockslim

以下代码无法完成,因为第二个阅读器(tRead2)无法获取锁定。

ReaderWriterLockSlim rw = new ReaderWriterLockSlim();

var tRead1 = Task.Run
    (
        () => rw.EnterReadLock()
    );

var tWrite = Task.Run
    (
          () =>
          {
              Thread.Sleep(1000);
              rw.EnterWriteLock();
          }
    );


var tRead2 = Task.Run
    (
        () =>
        {

            Thread.Sleep(3000);
            rw.EnterReadLock();
        }
    );

Task.WaitAll(tRead1, tRead2);

我没想到这种情况,我认为既然writer(tWrite)无法获得锁定,那么tRead2将被允许这样做(并且tWrite将等到所有读取模式锁被释放)。我将这种意想不到的行为解释为禁止作家饥饿的一种方式。

是否有任何同步结构允许tRead2获取锁定(即使tWrite可能会被饿死)?

0 个答案:

没有答案