【发布时间】:2011-09-13 17:05:26
【问题描述】:
给定以下代码 sn-p(在学习线程时在某处找到)。
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循环发现的类似代码时,任何人都可以帮助我理解一个高于另一个的用法。 谢谢。
【问题讨论】:
-
您可能需要指定语言并添加适当的标签。
-
忘记了,已经有人加了C#标签。
-
这与 Hoare 语义与 Mesa Semantics [Mesa 调度] 有关。通常,您必须使用带有 Mesa 调度的循环。但在您的特殊情况下,这无关紧要。
标签: c# multithreading synchronization