如果有两个线程作为生产者/消费者,那么有下面一行来防止死锁是个好主意。我所知道的活锁,但假设他们做了很多工作,调用此wait()方法之前:线程切换和死锁预防问题
// member variable
object _syncLock = new object();
void Wait()
{
lock (_syncLock)
{
Monitor.Pulse(_syncLock);
Monitor.Wait(_syncLock);
}
}
这是不可能的两个线程处于等待状态。
通过扩大锁定范围解决了问题,并且移除了Wait()和Pulse()。我从里德那里学到的是,为什么我只用两条线索和已知的生产者/消费者模式来解决这个问题呢?所以,重新设计的时候在看大图。关键是在Visual Studio中寻找代码时,代码行比CPU周期更有意义,因此如果事实上代码行不能比较上下文切换,那么很容易使锁定时间最小化。 – Xaqron 2010-10-28 03:17:16