Partager via


IExecutionResource, structure

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. La création d’un abonnement de thread est un moyen d’informer Resource Manager qu’un thread donné participe à la file d’attente de travail à un planificateur, ainsi que les racines de processeur virtuel Resource Manager attribuées au planificateur. Resource Manager utilise les informations pour éviter de sursubcrire les threads matériels où il peut.

Hiérarchie d'héritage

IExecutionResource

Spécifications

En-tête : concrtrm.h

Espace de noms : concurrency

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 retournent également une IExecutionResource interface représentant l’abonnement. Un appel correspondant à IExecutionResource  ::Remove décrémente le niveau d’abonnement du thread matériel par un.

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 ::D eactivate, ou IExecutionResource ::Remove décrémentent le niveau d’abonnement par un lorsqu’ils sont appelés 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 affecte des identificateurs uniques à ces nœuds commençant 0 par jusqu’à et y compris 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 ::Remove, méthode

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.

Voir aussi

accès concurrentiel Namespace
IVirtualProcessorRoot, structure