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
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 NULL
aufweist.
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 false
ist, 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 true
zurü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 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.
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.