以下代码无法完成,因为第二个阅读器(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可能会被饿死)?