給定下面的代碼片斷(在學習線程時在某處找到)。Monitor.Wait,條件變量
public class BlockingQueue<T>
{
private readonly object sync = new object();
private readonly Queue<T> queue;
public BlockingQueue()
{
queue = new Queue<T>();
}
public void Enqueue(T item)
{
lock (sync)
{
queue.Enqueue(item);
Monitor.PulseAll(sync);
}
}
public T Dequeue()
{
lock (sync)
{
while (queue.Count == 0)
Monitor.Wait(sync);
return queue.Dequeue();
}
}
}
我想了解的是,
爲什麼會有一個while循環?
while (queue.Count == 0)
Monitor.Wait(sync);
,什麼是錯的,
if(queue.Count == 0)
Monitor.Wait(sync);
其實,一切的時候,我看到了類似的代碼,我發現使用while循環,任何人都可以請幫我瞭解使用一個在另一個之上。 謝謝。
您可能需要指定語言並添加適當的標籤。 – 2011-06-13 06:36:11
忘記了,有人已經添加了C#標籤。 – 41K 2011-06-13 06:41:32
我來幫忙! – Default 2011-06-13 06:45:50