Freigeben über


IVirtualProcessorRoot-Struktur

Eine Abstraktion für einen Hardwarethread, auf dem ein Threadproxy ausgeführt werden kann.

Syntax

struct IVirtualProcessorRoot : public IExecutionResource;

Mitglieder

Öffentliche Methoden

Name Beschreibung
IVirtualProcessorRoot::Activate Bewirkt, dass der Threadproxy, der der Ausführungskontextschnittstelle pContext zugeordnet ist, mit der Ausführung auf diesem virtuellen Prozessorstamm beginnt.
IVirtualProcessorRoot::Deaktivieren Sorgt dafür, dass der auf diesem virtuellen Prozessor-Root laufende Threadproxy die Verteilung des Ausführungskontexts stoppt. Der Thread-Proxy wird beim Aufruf der Activate-Methode die Ausführung fortsetzen.
IVirtualProcessorRoot::EnsureAllTasksVisible Bewirkt, dass Daten, die in der Speicherhierarchie einzelner Prozessoren gespeichert sind, für alle Prozessoren im System sichtbar werden. Es stellt sicher, dass ein vollständiger Speicherzaun für alle Prozessoren ausgeführt wurde, bevor die Methode zurückkehrt.
IVirtualProcessorRoot::GetId Gibt einen eindeutigen Bezeichner für den virtuellen Prozessorstamm zurück.

Hinweise

Jeder Stamm des virtuellen Prozessors verfügt über eine zugeordnete Ausführungsressource. Die IVirtualProcessorRoot Schnittstelle erbt von der IExecutionResource-Schnittstelle . Mehrere virtuelle Prozessorwurzeln können dem gleichen zugrunde liegenden Hardwarethread entsprechen.

Der Ressourcen-Manager gewährt den Planern virtuelle Prozessorwurzeln als Reaktion auf Anforderungen für Ressourcen. Ein Scheduler kann einen virtuellen Prozessorstamm verwenden, um Arbeit auszuführen, indem er mit einem Ausführungskontext aktiviert wird.

Vererbungshierarchie

IExecutionResource

IVirtualProcessorRoot

Anforderungen

Kopfzeile: concrtrm.h

Namespace: Parallelität

IVirtualProcessorRoot::Activate-Methode

Bewirkt, dass der Threadproxy, der der Ausführungskontextschnittstelle pContext zugeordnet ist, mit der Ausführung auf diesem virtuellen Prozessorstamm beginnt.

virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;

Parameter

pContext
Eine Schnittstelle zum Ausführungskontext, die auf diesem virtuellen Prozessorstamm verteilt wird.

Hinweise

Der Ressourcen-Manager stellt einen Threadproxy bereit, wenn er nicht der Ausführungskontextschnittstelle zugeordnet ist. pContext

Die Activate Methode kann verwendet werden, um mit der Ausführung von Arbeiten an einem neuen virtuellen Prozessorstamm zu beginnen, der vom Ressourcen-Manager zurückgegeben wird, oder um den Threadproxy auf einem virtuellen Prozessorstamm fortzusetzen, der deaktiviert wurde oder gerade deaktiviert ist. Weitere Informationen zur Deaktivierung finden Sie unter IVirtualProcessorRoot::Deactivate. Wenn Sie einen deaktivierten stamm des virtuellen Prozessors fortsetzen, muss der Parameter pContext mit dem Parameter übereinstimmen, der zum Deaktivieren des Stamms des virtuellen Prozessors verwendet wird.

Sobald ein virtueller Prozessorstamm zum ersten Mal aktiviert wurde, können nachfolgende Aufrufpaare Deactivate und Activate miteinander konkurrieren. Dies bedeutet, dass es für den Ressourcen-Manager akzeptabel ist, einen Anruf mit Activate zu erhalten, bevor er den Anruf erhält, für den er mit Deactivate vorgesehen war.

Wenn Sie einen virtuellen Prozessorstamm aktivieren, signalisieren Sie dem Ressourcen-Manager, dass dieser virtuelle Prozessorstamm aktuell mit der Arbeit beschäftigt ist. Wenn ihr Scheduler keine Arbeit finden kann, die für diesen Stamm ausgeführt werden soll, wird erwartet, dass die Deactivate Methode aufgerufen wird, die den Ressourcen-Manager darüber informiert, dass der Stamm des virtuellen Prozessors im Leerlauf ist. Der Ressourcen-Manager verwendet diese Daten zum Lastenausgleich des Systems.

invalid_argument wird ausgelöst, wenn das Argument pContext den Wert NULLaufweist.

invalid_operation wird ausgelöst, wenn das Argument pContext nicht den Ausführungskontext darstellt, der zuletzt vom Stamm des virtuellen Prozessors verteilt wurde.

Die Aktivierung eines virtuellen Prozessor-Roots erhöht das Abonnementniveau des zugrunde liegenden Hardware-Threads um eins. Weitere Informationen zu Abonnementebenen finden Sie unter "IExecutionResource::CurrentSubscriptionLevel".

IVirtualProcessorRoot::Deactivate-Methode

Sorgt dafür, dass der auf diesem virtuellen Prozessor-Root laufende Threadproxy die Verteilung des Ausführungskontexts stoppt. Der Thread-Proxy wird beim Aufruf der Activate-Methode die Ausführung fortsetzen.

virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;

Parameter

pContext
Der Kontext, der derzeit von diesem Root verteilt wird.

Rückgabewert

Ein boolescher Wert. Ein Wert von true gibt an, dass der von der Deactivate Methode zurückgegebene Threadproxy als Reaktion auf einen Aufruf der Activate Methode zurückgegeben wird. Ein Wert von false gibt an, dass der von der Methode zurückgegebene Threadproxy als Reaktion auf ein Benachrichtigungsereignis im Ressourcen-Manager zurückgegeben wird. In einem planungsfähigen Thread-Planer im User-Mode (UMS) zeigt dies an, dass Elemente in der Abschlussliste des Planers erschienen sind und der Planer diese verarbeiten muss.

Hinweise

Verwenden Sie diese Methode, um die Ausführung eines virtuellen Prozessorstamms vorübergehend zu beenden, wenn Sie keine Arbeit in Ihrem Scheduler finden können. Ein Aufruf der Deactivate Methode muss aus der Dispatch Methode des Ausführungskontexts stammen, mit dem der virtuelle Prozessorstamm zuletzt aktiviert wurde. Mit anderen Worten: Der Threadproxy, der die Deactivate Methode aufruft, muss der Threadproxy sein, der derzeit im Stammverzeichnis des virtuellen Prozessors ausgeführt wird. Das Aufrufen der Methode auf einem virtuellen Prozessorstamm, auf dem Sie nicht ausgeführt werden, kann zu einem undefinierten Verhalten führen.

Ein deaktivierter Stamm des virtuellen Prozessors kann mit einem Aufruf der Activate Methode mit demselben Argument wie an die Deactivate Methode ausgelöst werden. Der Scheduler ist dafür verantwortlich, sicherzustellen, dass die Aufrufe der Activate- und Deactivate-Methode gepaart werden, aber sie müssen nicht in einer bestimmten Reihenfolge empfangen werden. Der Ressourcen-Manager kann einen Aufruf der Activate-Methode bearbeiten, bevor er einen Aufruf der Deactivate-Methode empfängt, für die er vorgesehen war.

Wenn ein virtueller Prozessorstamm erwacht und der Rückgabewert der Deactivate Methode der Wert falseist, sollte der Scheduler die UMS-Vervollständigungsliste über die IUMSCompletionList::GetUnblockNotifications Methode abfragen, diese Informationen bearbeiten und anschließend die Deactivate Methode erneut aufrufen. Dies sollte so lange wiederholt werden, bis die Deactivate Methode den Wert truezurückgibt.

invalid_argument wird ausgelöst, wenn das Argument pContext den Wert NULL aufweist.

invalid_operation wird ausgelöst, wenn der Stamm des virtuellen Prozessors nie aktiviert wurde oder das Argument pContext nicht den Ausführungskontext darstellt, der zuletzt vom Stamm des virtuellen Prozessors verteilt wurde.

Die Deaktivierung eines virtuellen Prozessorstamms verringert die Abonnementebene des zugrunde liegenden Hardwarethreads um einen. Weitere Informationen zu Abonnementebenen finden Sie unter "IExecutionResource::CurrentSubscriptionLevel".

IVirtualProcessorRoot::EnsureAllTasksVisible-Methode

Bewirkt, dass Daten, die in der Speicherhierarchie einzelner Prozessoren gespeichert sind, für alle Prozessoren im System sichtbar werden. Es stellt sicher, dass ein vollständiger Speicherzaun für alle Prozessoren ausgeführt wurde, bevor die Methode zurückkehrt.

virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;

Parameter

pContext
Der Kontext, der aktuell von dieser virtuellen Prozessorwurzel bearbeitet wird.

Hinweise

Diese Methode ist möglicherweise hilfreich, wenn Sie die Deaktivierung eines virtuellen Prozessorstamms mit dem Hinzufügen neuer Arbeit in den Scheduler synchronisieren möchten. Aus Leistungsgründen können Sie ihrem Planer Arbeitsaufgaben hinzufügen, ohne eine Speicherbarriere auszuführen. Dies bedeutet, dass Arbeitsaufgaben, die von einem Thread hinzugefügt werden, der auf einem Prozessor ausgeführt wird, nicht sofort für alle anderen Prozessoren sichtbar sind. Mithilfe dieser Methode in Verbindung mit der Deactivate Methode können Sie sicherstellen, dass der Planer nicht alle seine virtuellen Prozessorwurzeln deaktiviert, während Arbeitsaufgaben in den Auflistungen des Zeitplans vorhanden sind.

Ein Aufruf der EnsureAllTasksVisibleThe Methode muss aus der Dispatch Methode des Ausführungskontexts stammen, mit dem der virtuelle Prozessorstamm zuletzt aktiviert wurde. Mit anderen Worten: Der Threadproxy, der die EnsureAllTasksVisible Methode aufruft, muss der Threadproxy sein, der derzeit im Stammverzeichnis des virtuellen Prozessors ausgeführt wird. Das Aufrufen der Methode für einen virtuellen Prozessorstamm, auf dem Sie nicht ausgeführt werden, kann zu einem undefinierten Verhalten führen.

invalid_argument wird ausgelöst, wenn das Argument pContext den Wert NULLaufweist.

invalid_operation wird ausgelöst, wenn der Stamm des virtuellen Prozessors nie aktiviert wurde oder das Argument pContext nicht den Ausführungskontext darstellt, der zuletzt vom Stamm des virtuellen Prozessors verteilt wurde.

IVirtualProcessorRoot::GetId-Methode

Gibt einen eindeutigen Bezeichner für den virtuellen Prozessorstamm zurück.

virtual unsigned int GetId() const = 0;

Rückgabewert

Ein ganzzahliger Bezeichner.

Siehe auch

Concurrency-Namespace