従来のプロデューサー/コンシューマー スレッドの例を考えてみましょう。コンシューマがバッファ サイズがゼロでないことを確認する場合、ロックを待機する前に他のスレッドに通知する必要はありますか? メソッドコードは次のとおりです。
public void consume()
{
lock(_lock)
{
while(buf.Count == 0)
{
// Is there any need to *Monitor.Pulse(_lock);* here?
Monitor.Wait(_lock);
}
// Consume
}
}
public void produce()
{
lock(_lock)
{
// Produce
buf.Insert(item);
Monitor.PulseAll(_lock);
}
}