如果有兩個線程作爲生產者/消費者,那麼有下面一行來防止死鎖是個好主意。我所知道的活鎖,但假設他們做了很多工作,調用此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