Context::Unblock-Methode

Hebt die Blockierung des Kontexts auf und bewirkt, dass er ausführbar wird.

virtual void Unblock() =0;

Hinweise

Es ist vollkommen zulässig, dass ein Aufruf der Unblock-Methode vor einem entsprechenden Aufruf der Block-Methode erfolgt. Solange Aufrufe der Block-Methode und der Unblock-Methode ordnungsgemäß zugeordnet werden, behandelt die Laufzeit das natürliche Wettrennen beider Sortierungen ordnungsgemäß. Ein Unblock-Aufruf, der vor einem Block-Aufruf stattfindet, negiert den Effekt des Block-Aufrufs.

Es gibt mehrere Ausnahmen, die von dieser Methode ausgelöst werden können. Wenn ein Kontext versucht, die Unblock-Methode für sich selbst aufzurufen, wird eine context_self_unblock-Ausnahme ausgelöst. Wenn Aufrufe von Block und Unblock (z. B. werden zwei Aufrufe von Unblock für einen Kontext gemacht, der gerade ausgeführt wird) nicht ordnungsgemäß einander zugeordnet sind, wird eine context_unblock_unbalanced-Ausnahme ausgelöst.

Beachten Sie, dass es einen kritischen Zeitraum zwischen dem Punkt gibt, an dem der Code seinen Kontext veröffentlicht, damit ein anderer Thread die Unblock-Methode aufrufen kann, und dem Punkt, zu dem der tatsächliche Aufruf der Block-Methode stattfindet. Während dieses Zeitraums ist es obligatorisch, dass Sie keine Methode aufrufen, die selbst wiederum blockiert oder die Blockierung aufhebt (z. B. zum Abrufen einer Sperre). Aufrufe der Block-Methode und der Unblock-Methode verfolgen den Grund für die Blockierung und das Befreien nicht. Nur ein Objekt darf ein Block/Unblock-Paar besitzen.

Anforderungen

Header: concrt.h

Namespace: Concurrency

Siehe auch

Referenz

Context-Klasse

Context::Block-Methode

Konzepte

Taskplaner (Concurrency Runtime)