【发布时间】:2010-12-03 22:05:46
【问题描述】:
在队列中,入队和出队都需要写锁。为什么有人会使用 ReaderWriterLockSlim 而不是只使用 lock{}?例如,
使用 ReaderWriterLockSlim
qLock.EnterWriteLock();
try
{
localQ.Enqueue(item); // or localQ.Dequeue(item)
}
finally
{
qLock.ExitWriteLock();
}
对战锁定{}
try
{
lock(qLock) { localQ.Enqueue(item);} // or localQ.Dequeue(item)
}
【问题讨论】:
-
@Davita,在这种情况下,布赖恩的回答是错误的(但通常是正确的)。不幸的是,它有 3 个赞成票。
-
感谢大家的回复。不幸的是,我想我还没有答案。我用 EnterReadLock() 得到 Peek() 部分,但如果我的逻辑只是 Enqueue() 和 Dequeue() 我需要 EnterWriterLock() 无论如何。如果我处于锁定状态{}并说它的获取被无限期延迟或说很长; lock 不提供容错,并且有可能陷入死锁或阻塞情况。 ReaderWriterLock 或 ReaderWriterLockSlim 不会为我提供容错选项来避免死锁或长时间阻塞。想法?还是我不在这儿了
标签: c# multithreading thread-safety