入队和出队时队列<T>的锁定机制

G33*_*una 4 c# multithreading thread-safety

在队列中,入队和出列都需要写锁.为什么有人会使用ReaderWriterLockSlim而不是使用lock {}?举个例子,

使用ReaderWriterLockSlim

qLock.EnterWriteLock(); 
try 
{ 
    localQ.Enqueue(item); // or localQ.Dequeue(item)
} 

finally 
{ 
    qLock.ExitWriteLock(); 
} 
Run Code Online (Sandbox Code Playgroud)

与锁{}

try 
{ 
    lock(qLock) { localQ.Enqueue(item);} // or localQ.Dequeue(item)
} 
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 5

ReaderWriterLockSlim主要是在有许多线程经常从资源读取但只有少数线程写入它的情况下使用主要是性能优化.

Monitor类(由lock语句使用)获取资源的独占锁定 - 这意味着读取器和写入器都被阻止.然而,在许多情况下,阅读比写作更频繁.在这些情况下,使用读取器/写入器锁允许多个读取器同时输入锁,但一次只能输入一个写入器(当所有排队的读取器都出来时).

在您的示例中,读取器/写入器锁只有在有其他代码查看队列而不对项目进行dequeing时才有意义 ...否则所有操作都会改变写入,并且lock语句更合适.