Рассмотрите пример традиционного производства/потребителя. Когда потребитель проверяет размер буфера не равным нулю, есть ли необходимость сигнализировать другие потоки перед ожиданием блокировки? Вот методы код:Существует ли какой-либо тупик в этом коде?
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);
}
}
Вы имеете в виду, что код работает даже без каких-либо 'Monitor.Pulse'? – Mehraban
@SAM «Monitor.Pulse» в ** продюсере ** необходим и важен - пробудить ожидающих потребителей. Тем не менее, «Monitor.Pulse» в ** пользователе ** не делает ничего полезного (основанного исключительно на показанном коде) –
Да, это была ошибка в примере, потому что это не фактический код. Я пересмотрел его. – Mehraban