我正在从Albahari 的线程文章链接中实现“生产者/消费者队列” -->
在下面这篇文章的工作方法中,如果我在_wh.WaitOne() 之前添加一个控制台写入,如 Console.WriteLine("In waiting state .... 1"),那么信号不起作用并且消费者线程似乎无限期地等待.
void Work()
{
while (true)
{
string task = null;
lock (_locker)
if (_tasks.Count > 0)
{
task = _tasks.Dequeue();
if (task == null) return;
}
if (task != null)
{
Console.WriteLine ("Performing task: " + task);
Thread.Sleep (1000); // simulate work...
}
else
**Console.WriteLine("In waiting state .... 1");**
_wh.WaitOne(); // No more tasks - wait for a signal
}
}
有人可以解释这种行为吗?