2010-02-04 2 views
0

MSDN (http://msdn.microsoft.com/en-us/library/aa332339(VS.71).aspx) говорит, что ждать «Освобождает блокировку объекта и блокирует текущий поток, пока он не восстановит блокировку». Это подразумевает, в основном, блокировку переключения (освобождение, давая другой поток возможность запуска, блокировка блокировки). Но разве это не Pulse()? Единственное небольшое отличие от Pulse - он постоянно сигнализирует о приобретении замка?Разница между Wait() и Pulse()

# потоковая руководство C (http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse) имеет очень хорошую аналогию:

«Думай о нем, как автоматическая парковка: вы в очереди первым на получки станции, чтобы подтвердить свой билет (очереди ожидания),»

Итак, с описанием MSDN это означает, что при отпускании блокировки и блокировки (так же, как переключение ожидания), один автомобиль проходит, а затем барьер (замок) падает вниз?

ответ

1

Monitor.Wait и Monitor.Pulse относятся к определенному шаблону для поддержки создания переменных условий по любому ссылочному объекту в .NET. Вне этого конкретного шаблона они бесполезны (или, по крайней мере, я еще не видел такого использования).

Разница заключается в том:

  • Wait: высвобождает замок, ждет импульса (из другого потока, конечно), а затем снова получает блокировку.
  • Pulse: освобождает блокировку, сигнализирует об очередном ожидании потока, а затем повторно приобретает замок.

Это средний бит: сигнал ожидания ожидания - это разница между двумя методами, и эта разница позволяет безопасные межпоточные сигналы. Резюме: они являются дополнительными частями, которые подходят друг другу для создания чего-то.

+1

http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse стоит прочитать тоже –