Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Abstraction d'un thread matériel.
Syntaxe
struct IExecutionResource;
Membres
Méthodes publiques
| Nom | Description |
|---|---|
| IExecutionResource ::CurrentSubscriptionLevel | Retourne le nombre de racines de processeur virtuel activées et de threads externes abonnés actuellement associés au thread matériel sous-jacent que représente cette ressource d’exécution. |
| IExecutionResource ::GetExecutionResourceId | Retourne un identificateur unique pour le thread matériel que cette ressource d’exécution représente. |
| IExecutionResource ::GetNodeId | Retourne un identificateur unique pour le nœud processeur auquel appartient cette ressource d’exécution. |
| IExecutionResource ::Remove | Retourne cette ressource d’exécution au Resource Manager. |
Notes
Les ressources d’exécution peuvent être autonomes ou associées à des racines de processeur virtuel. Une ressource d’exécution autonome est créée lorsqu’un thread de votre application crée un abonnement thread. Les méthodes ISchedulerProxy ::SubscribeThread et ISchedulerProxy ::RequestInitialVirtualProcessors créent des abonnements de thread et retournent une IExecutionResource interface représentant l’abonnement. Créer un abonnement de thread est un moyen d’informer le Resource Manager qu’un thread donné participera à la file d’attente de travail d'un planificateur, ainsi qu'aux racines de processeur virtuel que le Resource Manager attribue au planificateur. Le gestionnaire de ressources utilise les informations pour éviter de surdimensionner les threads matériels là où il le peut.
Hiérarchie d'héritage
IExecutionResource
Spécifications
En-tête : concrtrm.h
Espace de noms : concurrence
IExecutionResource::CurrentSubscriptionLevel, méthode
Retourne le nombre de racines de processeur virtuel activées et de threads externes abonnés actuellement associés au thread matériel sous-jacent que représente cette ressource d’exécution.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Valeur de retour
Niveau d’abonnement actuel.
Notes
Le niveau d’abonnement vous indique le nombre de threads en cours d’exécution associés au thread matériel. Cela inclut uniquement les threads dont Resource Manager est conscient sous la forme de threads abonnés et de racines de processeur virtuel qui exécutent activement des proxys de threads.
Appel de la méthode ISchedulerProxy ::SubscribeCurrentThread, ou de la méthode ISchedulerProxy ::RequestInitialVirtualProcessors avec le paramètre doSubscribeCurrentThread défini sur la valeur true incrémente le niveau d’abonnement d’un thread matériel par un. Ils fournissent également une interface IExecutionResource qui représente l'abonnement. Un appel correspondant à IExecutionResource::Remove réduit de un le niveau d'abonnement du thread matériel.
L’acte d’activation d’une racine de processeur virtuel à l’aide de la méthode IVirtualProcessorRoot ::Activate incrémente le niveau d’abonnement d’un thread matériel par un. Les méthodes IVirtualProcessorRoot::Deactivate, ou IExecutionResource::Remove, décrémentent par un niveau le niveau d'abonnement lorsqu'elles sont appelées sur une racine de processeur virtuel activée.
Resource Manager utilise des informations au niveau de l’abonnement comme l’une des façons de déterminer quand déplacer des ressources entre des planificateurs.
IExecutionResource::GetExecutionResourceId Méthode
Retourne un identificateur unique pour le thread matériel que cette ressource d’exécution représente.
virtual unsigned int GetExecutionResourceId() const = 0;
Valeur de retour
Identificateur unique du thread matériel sous-jacent à cette ressource d’exécution.
Notes
Chaque thread matériel est affecté à un identificateur unique par le runtime d’accès concurrentiel. Si plusieurs ressources d’exécution sont associées au thread matériel, elles auront tous le même identificateur de ressource d’exécution.
IExecutionResource :: GetNodeId, méthode
Retourne un identificateur unique pour le nœud processeur auquel appartient cette ressource d’exécution.
virtual unsigned int GetNodeId() const = 0;
Valeur de retour
Identificateur unique pour un nœud de processeur.
Notes
Le runtime d’accès concurrentiel représente des threads matériels sur le système dans des groupes de nœuds de processeur. Les nœuds sont généralement dérivés de la topologie matérielle du système. Par exemple, tous les processeurs sur un socket spécifique ou un nœud NUMA spécifique peuvent appartenir au même nœud de processeur. Resource Manager attribue des identificateurs uniques à ces nœuds en commençant par 0 et allant jusqu’à nodeCount - 1, où nodeCount représente le nombre total de nœuds de processeur sur le système.
Le nombre de nœuds peut être obtenu à partir de la fonction GetProcessorNodeCount.
IExecutionResource::méthode Remove
Retourne cette ressource d’exécution au Resource Manager.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
Paramètres
pScheduler
Interface du planificateur qui effectue la demande de suppression de cette ressource d’exécution.
Notes
Utilisez cette méthode pour retourner des ressources d’exécution autonomes ainsi que des ressources d’exécution associées aux racines du processeur virtuel à Resource Manager.
S’il s’agit d’une ressource d’exécution autonome que vous avez reçue de l’une des méthodes ISchedulerProxy ::SubscribeCurrentThread ou ISchedulerProxy ::RequestInitialVirtualProcessors, l’appel de la méthode Remove met fin à l’abonnement de thread que la ressource a été créée pour représenter. Vous devez mettre fin à tous les abonnements de thread avant d’arrêter un proxy de planificateur et devez appeler Remove à partir du thread qui a créé l’abonnement.
Les racines du processeur virtuel peuvent également être retournées à Resource Manager en appelant la Remove méthode, car l’interface IVirtualProcessorRoot hérite de l’interface IExecutionResource . Vous devrez peut-être retourner une racine de processeur virtuel en réponse à un appel à la méthode IScheduler ::RemoveVirtualProcessors , ou lorsque vous avez terminé avec une racine de processeur virtuel sursubcrite que vous avez obtenue à partir de la méthode ISchedulerProxy ::CreateOversubscriber . Pour les racines du processeur virtuel, il n’existe aucune restriction sur le thread qui peut appeler la Remove méthode.
invalid_argument est levée si le paramètre pScheduler est défini sur NULL.
invalid_operation est levée si le paramètre pScheduler est différent du planificateur pour lequel cette ressource d’exécution a été créée ou, avec une ressource d’exécution autonome, si le thread actuel est différent du thread qui a créé l’abonnement de thread.