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 пока поток не вызовет WaitOne, WaitAnyили WaitAll. Освобождает AutoResetEvent этот поток и возвращается в состояние без знака.
Обратите внимание, что синхронизированный объект содержит несколько ссылок, включая ссылку на поток, который в настоящее время содержит блокировку, ссылку на готовую очередь, которая содержит потоки, готовые к получению блокировки, и ссылку на очередь ожидания, которая содержит потоки, ожидающие уведомления об изменении состояния объекта.
Методы Pulse
, PulseAllи Wait должны вызываться из синхронизированного блока кода.
Чтобы сообщить нескольким потокам PulseAll , используйте метод .