首先,这篇 MSDN 文章可能会有所帮助。Jeffrey Richter 谈到的库可在此处获得。
由于该应用程序是在 .Net 2.0 中开发的,因此我建议使用自定义的 ReaderWriterLock,它更喜欢作者而不是读者。此外,如果您正在寻找一些源代码,那么这个人可能会对您有所帮助。其中一个自定义的 ReaderWriterLock,他写道:
public sealed class ReaderWriterLock
{
int readers = 0;
int writers = 0;
public void AcquireReaderLock()
{
Thread.BeginCriticalRegion();
while (true)
{
if (Thread.VolatileRead(ref writers) == 0)
{
Interlocked.Increment(ref readers);
if (Thread.VolatileRead(ref writers) == 0)
{
return;
}
else
{
Interlocked.Decrement(ref readers);
}
}
Thread.Sleep(1);
}
}
public void ReleaseReaderLock()
{
Interlocked.Decrement(ref readers);
Thread.EndCriticalRegion();
}
public void AcquireWriterLock()
{
Thread.BeginCriticalRegion();
while (Interlocked.CompareExchange(ref writers, 1, 0) != 0)
{
Thread.Sleep(1);
}
while (Thread.VolatileRead(ref readers) != 0)
{
Thread.Sleep(1);
}
}
public void ReleaseWriterLock()
{
Thread.VolatileWrite(ref writers, 0);
Thread.EndCriticalRegion();
}
}
关键点:
- 喜欢作家胜过读者
- 先到先得
- 自旋锁非常适合短锁持续时间