2

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

4

0 回答 0