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
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 Deactivate
Activate
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.