Monitor.Pulse(Object) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt een thread in de wachtrij van een wijziging in de status van het vergrendelde object op de hoogte gesteld.
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)
Parameters
- obj
- Object
Het object waarop een thread wacht.
Uitzonderingen
De obj parameter is null.
De aanroepende thread is niet de eigenaar van de vergrendeling voor het opgegeven object.
Opmerkingen
Alleen de huidige eigenaar van de vergrendeling kan een wachtend object signalen met behulp van Pulse.
De thread die momenteel eigenaar is van de vergrendeling van het opgegeven object roept deze methode aan om de volgende thread in de regel voor de vergrendeling aan te geven. Na ontvangst van de puls wordt de wachtthread verplaatst naar de wachtrij die gereed is. Wanneer de thread die wordt aangeroepen Pulse de vergrendeling loslaat, verkrijgt de volgende thread in de wachtrij gereed (wat niet noodzakelijkerwijs de thread is die is gepulseerd) de vergrendeling.
Important
De Monitor klasse behoudt de status niet die aangeeft dat de Pulse methode is aangeroepen. Dus als u aanroept Pulse wanneer er geen threads wachten, wordt de volgende thread die blokken aanroept Wait , alsof Pulse deze nog nooit is aangeroepen. Als twee threads worden gebruikt Pulse en Wait gebruikt, kan dit leiden tot een impasse. Vergelijk dit met het gedrag van de AutoResetEvent klasse: Als u een AutoResetEvent signaal aanroept door de methode aan Set te roepen en er geen threads wachten, blijft de AutoResetEvent status gesignaleerd totdat een threadaanroep WaitOne, WaitAnyof WaitAll. De AutoResetEvent releases die thread en keert terug naar de niet-ondertekende status.
Houd er rekening mee dat een gesynchroniseerd object verschillende verwijzingen bevat, waaronder een verwijzing naar de thread die momenteel de vergrendeling bevat, een verwijzing naar de gereede wachtrij, die de threads bevat die gereed zijn om de vergrendeling te verkrijgen en een verwijzing naar de wachtwachtrij, die de threads bevat die wachten op melding van een wijziging in de status van het object.
De Pulse, PulseAllen Wait methoden moeten worden aangeroepen vanuit een gesynchroniseerd codeblok.
Als u meerdere threads wilt signaleren, gebruikt u de PulseAll methode.