Partager via


IVirtualProcessorRoot, structure

Abstraction d'un thread matériel sur laquelle un proxy de thread peut s'exécuter.

Syntaxe

struct IVirtualProcessorRoot : public IExecutionResource;

Membres

Méthodes publiques

Nom Description
IVirtualProcessorRoot ::Activate Provoque l’exécution du proxy de thread associé à l’interface pContext de contexte d’exécution sur cette racine de processeur virtuel.
IVirtualProcessorRoot ::D eactivate Provoque l’exécution du proxy de thread sur cette racine de processeur virtuel pour arrêter la répartition du contexte d’exécution. Le proxy de thread reprend l’exécution sur un appel à la Activate méthode.
IVirtualProcessorRoot ::EnsureAllTasksVisible Provoque l’affichage des données stockées dans la hiérarchie mémoire des processeurs individuels par tous les processeurs sur le système. Elle garantit qu’une clôture de mémoire complète a été exécutée sur tous les processeurs avant que la méthode ne retourne.
IVirtualProcessorRoot ::GetId Retourne un identificateur unique pour la racine du processeur virtuel.

Notes

Chaque racine de processeur virtuel a une ressource d’exécution associée. L’interface IVirtualProcessorRoot hérite de l’interface IExecutionResource . Plusieurs racines de processeur virtuel peuvent correspondre au même thread matériel sous-jacent.

Resource Manager accorde des racines de processeur virtuel aux planificateurs en réponse aux demandes de ressources. Un planificateur peut utiliser une racine de processeur virtuel pour effectuer le travail en l’activant avec un contexte d’exécution.

Hiérarchie d'héritage

IExecutionResource

IVirtualProcessorRoot

Spécifications

En-tête : concrtrm.h

Espace de noms : concurrency

IVirtualProcessorRoot ::Activate, méthode

Provoque l’exécution du proxy de thread associé à l’interface pContext de contexte d’exécution sur cette racine de processeur virtuel.

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

Paramètres

pContext
Interface vers le contexte d’exécution qui sera distribuée sur cette racine de processeur virtuel.

Notes

Resource Manager fournit un proxy de thread s’il n’est pas associé à l’interface de contexte d’exécution pContext

La Activate méthode peut être utilisée pour commencer à exécuter le travail sur une nouvelle racine de processeur virtuel retournée par Resource Manager, ou pour reprendre le proxy de thread sur une racine de processeur virtuel qui a désactivé ou est sur le point de désactiver. Pour plus d’informations sur la désactivation, consultez IVirtualProcessorRoot ::D eactivate . Lorsque vous reprenez une racine de processeur virtuel désactivée, le paramètre doit être identique au paramètre pContext utilisé pour désactiver la racine du processeur virtuel.

Une fois qu’une racine de processeur virtuel a été activée pour la première fois, les paires suivantes d’appels et DeactivateActivate peuvent se courir entre elles. Cela signifie qu’il est acceptable que Resource Manager reçoive un appel Activate avant de recevoir l’appel Deactivate pour lequel il a été destiné.

Lorsque vous activez une racine de processeur virtuel, vous signalez à Resource Manager que cette racine de processeur virtuel est actuellement occupée avec le travail. Si votre planificateur ne trouve aucun travail à exécuter sur cette racine, il est prévu d’appeler la Deactivate méthode indiquant à Resource Manager que la racine du processeur virtuel est inactive. Resource Manager utilise ces données pour équilibrer la charge du système.

invalid_argument est levée si l’argument pContext a la valeur NULL.

invalid_operation est levée si l’argument pContext ne représente pas le contexte d’exécution qui a été distribué récemment par cette racine de processeur virtuel.

L’activation d’une racine de processeur virtuel augmente le niveau d’abonnement du thread matériel sous-jacent par un. Pour plus d’informations sur les niveaux d’abonnement, consultez IExecutionResource ::CurrentSubscriptionLevel.

IVirtualProcessorRoot ::D eactivate, méthode

Provoque l’exécution du proxy de thread sur cette racine de processeur virtuel pour arrêter la répartition du contexte d’exécution. Le proxy de thread reprend l’exécution sur un appel à la Activate méthode.

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

Paramètres

pContext
Contexte actuellement distribué par cette racine.

Valeur de retour

Valeur booléenne. Une valeur indiquant true que le proxy de thread retourné par la Deactivate méthode en réponse à un appel à la Activate méthode. Une valeur indiquant false que le proxy de thread retourné par la méthode en réponse à un événement de notification dans Resource Manager. Sur un planificateur de threads UMS (UMS) en mode utilisateur, cela indique que les éléments sont apparus dans la liste d’achèvement du planificateur et que le planificateur est tenu de les gérer.

Notes

Utilisez cette méthode pour arrêter temporairement l’exécution d’une racine de processeur virtuel lorsque vous ne trouvez aucun travail dans votre planificateur. Un appel à la Deactivate méthode doit provenir de la Dispatch méthode du contexte d’exécution avec lequel la racine du processeur virtuel a été activée pour la dernière fois. En d’autres termes, le proxy de thread appelant la Deactivate méthode doit être celui qui s’exécute actuellement sur la racine du processeur virtuel. L’appel de la méthode sur une racine de processeur virtuel sur laquelle vous n’exécutez pas peut entraîner un comportement non défini.

Une racine de processeur virtuel désactivée peut être réveillée avec un appel à la Activate méthode, avec le même argument que celui passé à la Deactivate méthode. Le planificateur est chargé de s’assurer que les Activate appels aux méthodes et Deactivate les appels sont couplés, mais ils ne sont pas requis pour être reçus dans un ordre spécifique. Resource Manager peut gérer la réception d’un appel à la Activate méthode avant de recevoir un appel à la Deactivate méthode pour laquelle il a été destiné.

Si une racine de processeur virtuel se réveille et que la valeur de retour de la Deactivate méthode est la valeur false, le planificateur doit interroger la liste d’achèvement UMS via la IUMSCompletionList::GetUnblockNotifications méthode, agir sur ces informations, puis appeler à nouveau la Deactivate méthode. Cette opération doit être répétée jusqu’à ce que la Deactivate méthode retourne la valeur true.

invalid_argument est levée si l’argument pContext a la valeur NULL.

invalid_operation est levée si la racine du processeur virtuel n’a jamais été activée, ou si l’argument pContext ne représente pas le contexte d’exécution qui a été réparti récemment par cette racine de processeur virtuel.

L’acte de désactivation d’une racine de processeur virtuel diminue le niveau d’abonnement du thread matériel sous-jacent par un. Pour plus d’informations sur les niveaux d’abonnement, consultez IExecutionResource ::CurrentSubscriptionLevel.

IVirtualProcessorRoot ::EnsureAllTasksVisible, méthode

Provoque l’affichage des données stockées dans la hiérarchie mémoire des processeurs individuels par tous les processeurs sur le système. Elle garantit qu’une clôture de mémoire complète a été exécutée sur tous les processeurs avant que la méthode ne retourne.

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

Paramètres

pContext
Contexte actuellement distribué par cette racine de processeur virtuel.

Notes

Vous trouverez peut-être cette méthode utile lorsque vous souhaitez synchroniser la désactivation d’une racine de processeur virtuel avec l’ajout de nouvelles tâches dans le planificateur. Pour des raisons de performances, vous pouvez décider d’ajouter des éléments de travail à votre planificateur sans exécuter de barrière de mémoire, ce qui signifie que les éléments de travail ajoutés par un thread s’exécutant sur un processeur ne sont pas immédiatement visibles par tous les autres processeurs. En utilisant cette méthode conjointement avec la Deactivate méthode, vous pouvez vous assurer que votre planificateur ne désactive pas toutes ses racines de processeur virtuel alors que les éléments de travail existent dans les collections de votre planificateur.

Un appel à la EnsureAllTasksVisibleThe méthode doit provenir de la Dispatch méthode du contexte d’exécution avec lequel la racine du processeur virtuel a été activée pour la dernière fois. En d’autres termes, le proxy de thread appelant la EnsureAllTasksVisible méthode doit être celui qui s’exécute actuellement sur la racine du processeur virtuel. L’appel de la méthode sur une racine de processeur virtuel sur laquelle vous n’exécutez pas peut entraîner un comportement non défini.

invalid_argument est levée si l’argument pContext a la valeur NULL.

invalid_operation est levée si la racine du processeur virtuel n’a jamais été activée, ou si l’argument pContext ne représente pas le contexte d’exécution qui a été réparti récemment par cette racine de processeur virtuel.

IVirtualProcessorRoot ::GetId, méthode

Retourne un identificateur unique pour la racine du processeur virtuel.

virtual unsigned int GetId() const = 0;

Valeur de retour

Identificateur entier.

Voir aussi

accès concurrentiel Namespace