В Delphi, что фактически делает System.TMonitor.Pulse и TMonitor.PulseAll

Мне было очень приятно видеть, что Delphi представляет запись TMonitor в Delphi 2009, позволяя вам блокировать определенные объекты в многопоточной среде. Меня озадачило методы Pulse и PulseAll этого типа записи.

Например, запись для Pulse в Delphi help указывает: "Уведомляет следующий поток в очереди ожидания, что он сможет заблокировать указанный объект, как только вызывающий поток освободит объект".

Действительно? Что это значит? Я использовал TMonitor без использования Pulse без проблем. Кроме того, некоторые из применений TMonitor в источнике Delphi никогда не используют Pulse.

Используются ли методы Pulse и PulseAll только в записи Delphi TMonitor для совместимости на уровне исходного кода с классом .NET Monitor или они действительно служат цели?

Есть два вопроса ( "TMonitor.Pulse vs TMonitor.PulseAll" и "Что такое TMonitor в системном блоке Delphi хорошо для" ), которые говорят с этим вопросом, но я ищу окончательный ответ.

Ответ 1

Ссылка wikipedia в моем ответе на упомянутый вопрос дает обсуждение использования функции wait/pulse/pulseall для монитора. Поток должен войти в монитор, чтобы ожидание вызова. Затем другой поток должен войти в монитор и вызвать импульс или импульс, чтобы сигнализировать первый ожидающий поток. Импульс сигнализирует только один ожидающий поток, тогда как импульсный сигнал передает все ожидающие потоки. Для более подробного обсуждения просмотрите раздел переменных условий статьи wikipedia. Также есть комментарии в источнике RTL, описывающие методы TMonitor.