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