考慮下面的代碼信號,當我敲回車鍵阻塞條件正在發生變化:代碼不起作用根據需要而不等待和脈衝
class Program
{
static readonly object _locker = new object();
static bool _go;
static void Main()
{
new Thread(Work).Start();
Console.ReadLine();
lock (_locker)
{
_go = true;
Monitor.Pulse(_locker);
}
}
static void Work()
{
lock (_locker)
while (!_go)
Monitor.Wait(_locker);
Console.WriteLine("Woken!!!");
}
}
但是,如果我不使用Monitor.Wait
和Monitor.Pulse
然後Console.WriteLine("Woken!!!");
從未被調用過,看起來好像_go
標誌沒有改變。
有誰知道爲什麼?
有一個很好的(和免費的)有關線程的電子書:['Albahari'](http://www.albahari.com/threading/) –