Monitor.Pulse(Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Уведомляет поток в очереди ожидания изменения состояния заблокированного объекта.
public:
static void Pulse(System::Object ^ obj);
public static void Pulse(object obj);
static member Pulse : obj -> unit
Public Shared Sub Pulse (obj As Object)
Параметры
- obj
- Object
Объект, который ожидает поток.
Исключения
Параметр obj имеет значение null.
Вызывающий поток не владеет блокировкой указанного объекта.
Комментарии
Только текущий владелец блокировки может сигнализировать об объекте ожидания с помощью Pulse.
Поток, который в настоящее время владеет блокировкой указанного объекта, вызывает этот метод, чтобы сигнализировать следующему потоку в строке блокировки. После получения импульса поток ожидания перемещается в готовую очередь. При вызове потока, вызываемого Pulse блокировкой, следующий поток в готовой очереди (который не обязательно пульсировал поток) получает блокировку.
Это важно
Класс Monitor не поддерживает состояние, указывающее, что Pulse метод был вызван. Таким образом, если вы вызываете Pulse , когда потоки не ожидают, следующий поток, который вызывает Wait блоки, как если Pulse бы не был вызван. Если два потока используются Pulse и Wait взаимодействуют, это может привести к взаимоблокировке. Сравните это с поведением AutoResetEvent класса: если вы сигнализируете AutoResetEvent о вызове методаSet, и нет потоков ожидания, AutoResetEvent остается в сигнальном состоянии до вызова WaitOneWaitAnyпотока илиWaitAll. Выпуски AutoResetEvent , которые поток и возвращаются в состояние без знака.
Обратите внимание, что синхронизированный объект содержит несколько ссылок, включая ссылку на поток, содержащий блокировку, ссылку на готовую очередь, содержащую потоки, готовые к получению блокировки, и ссылку на очередь ожидания, которая содержит потоки, ожидающие уведомления об изменении состояния объекта.
Методы Pulse, PulseAll и Wait должны вызываться из синхронизированного блока кода.
Чтобы сигнализировать о нескольких потоках, используйте PulseAll этот метод.