IVirtualProcessorRoot-Struktur

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

Syntax

struct IVirtualProcessorRoot : public IExecutionResource;

Member

Ö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::D eaktivieren Bewirkt, dass der Threadproxy, der derzeit auf diesem virtuellen Prozessorstamm ausgeführt wird, die Verteilerung des Ausführungskontexts beendet. Der Threadproxy wird bei einem Aufruf der Activate Methode fortgesetzt.
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ückgegeben wird.
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::D eactivate ". 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 miteinander fahren und Activate miteinander fahren. Dies bedeutet, dass es für den Ressourcen-Manager akzeptabel ist, einen Anruf Activate zu empfangen, bevor er den Anruf empfängt, für den Deactivate er 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.

Der Akt der Aktivierung eines virtuellen Prozessorstamms erhöht die Abonnementebene des zugrunde liegenden Hardwarethreads um einen. Weitere Informationen zu Abonnementebenen finden Sie unter "IExecutionResource::CurrentSubscriptionLevel".

IVirtualProcessorRoot::D eactivate-Methode

Bewirkt, dass der Threadproxy, der derzeit auf diesem virtuellen Prozessorstamm ausgeführt wird, die Verteilerung des Ausführungskontexts beendet. Der Threadproxy wird bei einem Aufruf der Activate Methode fortgesetzt.

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

Parameter

pContext
Der Kontext, der derzeit von diesem Stamm 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 umplanbaren Threadplaner (User-Mode schedulable, UMS) gibt dies an, dass Elemente in der Vervollständigungsliste des Planers angezeigt wurden, und der Planer ist erforderlich, um sie zu verarbeiten.

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 für einen virtuellen Prozessorstamm, für den Sie nicht ausgeführt werden, kann zu einem nicht definierten 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 Zeitplaner ist dafür verantwortlich, sicherzustellen, dass Aufrufe der Activate Methoden Deactivate gekoppelt sind, aber nicht in einer bestimmten Reihenfolge empfangen werden müssen. Der Ressourcen-Manager kann den Empfang eines Aufrufs der Activate Methode verarbeiten, bevor er einen Aufruf der Methode empfängt, für die Deactivate 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ückgegeben wird.

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

Parameter

pContext
Der Kontext, der derzeit von diesem virtuellen Prozessorstamm verteilt 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, für den Sie nicht ausgeführt werden, kann zu einem nicht definierten 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