Monitor.Wait - while или if?

В настоящее время я готовлюсь к экзамену по многопоточности. Я прочитал хорошую статью о ветвях от albahari . У меня вопрос по использованию монитора - почему здесь вместо if используется цикл?

lock (_locker)
{
  while (!_go) //why while and not if?
    Monitor.Wait (_locker);  // _lock is released
  // lock is regained
  ...
}

Я думаю, что if было бы достаточно.

Боюсь, что я не совсем понимаю статью.

// Редактировать Пример кода:

class SimpleWaitPulse
{
  static readonly object _locker = new object();
  static bool _go;

  static void Main()
  {                                // The new thread will block
    new Thread (Work).Start();     // because _go==false.

    Console.ReadLine();            // Wait for user to hit Enter

    lock (_locker)                 // Let's now wake up the thread by
    {                              // setting _go=true and pulsing.
      _go = true;
      Monitor.Pulse (_locker);
    }
  }

  static void Work()
  {
    lock (_locker)
      while (!_go)
        Monitor.Wait (_locker);    // Lock is released while we’re waiting

    Console.WriteLine ("Woken!!!");
  }
}

5
задан bitsmuggler 16 January 2012 в 19:24
поделиться