Monitor.Pulse(Object) Metod

Definition

Meddelar en tråd i väntekön om en ändring i det låsta objektets tillstånd.

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)

Parametrar

obj
Object

Objektet som en tråd väntar på.

Undantag

Parametern obj är null.

Den anropande tråden äger inte låset för det angivna objektet.

Kommentarer

Endast låsets nuvarande ägare kan signalera ett väntande objekt med hjälp av Pulse.

Tråden som för närvarande äger låset på det angivna objektet anropar den här metoden för att signalera nästa tråd i rad för låset. När pulsen tas emot flyttas den väntande tråden till den färdiga kön. När tråden som anropade Pulse frigör låset, hämtar nästa tråd i den färdiga kön (som inte nödvändigtvis är tråden som pulsades) låset.

Important

Klassen Monitor upprätthåller inte tillstånd som anger att Pulse metoden har anropats. Om du anropar Pulse när inga trådar väntar blockerar nästa tråd som anropar Wait block som om Pulse den aldrig hade anropats. Om två trådar använder Pulse och Wait interagerar kan detta leda till ett dödläge. Jämför detta med klassens AutoResetEvent beteende: Om du signalerar en AutoResetEvent genom att anropa dess Set metod, och det inte finns några trådar som väntar, AutoResetEvent förblir i ett signalerat tillstånd tills en tråd anropar WaitOne, WaitAnyeller WaitAll. Frigör AutoResetEvent den tråden och återgår till det osignalade tillståndet.

Observera att ett synkroniserat objekt innehåller flera referenser, inklusive en referens till tråden som för närvarande innehåller låset, en referens till den färdiga kön, som innehåller trådarna som är redo att hämta låset och en referens till den väntande kön, som innehåller trådarna som väntar på meddelande om en ändring i objektets tillstånd.

Metoderna Pulse, PulseAlloch Wait måste anropas inifrån ett synkroniserat kodblock.

Använd metoden för PulseAll att signalera flera trådar.

Gäller för

Se även