IVirtualProcessorRoot (Estructura)
Una abstracción para un subproceso de hardware en el que un proxy del subproceso puede ejecutarse.
Sintaxis
struct IVirtualProcessorRoot : public IExecutionResource;
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
IVirtualProcessorRoot::Activate | Hace que el proxy de subproceso asociado a la interfaz pContext de contexto de ejecución empiece a ejecutarse en esta raíz del procesador virtual. |
IVirtualProcessorRoot::Deactivate | Hace que el proxy de subproceso que se ejecuta actualmente en esta raíz del procesador virtual deje de enviar el contexto de ejecución. El proxy de subproceso reanudará la ejecución al llamar al método Activate . |
IVirtualProcessorRoot::EnsureAllTasksVisible | Hace que los datos almacenados en la jerarquía de memoria de los procesadores individuales sean visibles para todos los procesadores del sistema. Garantiza que se ha ejecutado una barrera de memoria completa en todos los procesadores antes de que se devuelva el método. |
IVirtualProcessorRoot::GetId | Devuelve un identificador único para la raíz del procesador virtual. |
Comentarios
Cada raíz del procesador virtual tiene un recurso de ejecución asociado. La interfaz IVirtualProcessorRoot
hereda de la interfaz IExecutionResource. Varias raíces del procesador virtual pueden corresponder al mismo subproceso de hardware subyacente.
Resource Manager concede raíces del procesador virtual a los programadores en respuesta a las solicitudes de recursos. Un programador puede usar una raíz del procesador virtual para realizar el trabajo activándolo con un contexto de ejecución.
Jerarquía de herencia
IVirtualProcessorRoot
Requisitos
Encabezado: concrtrm.h
Espacio de nombres: simultaneidad
IVirtualProcessorRoot::Activate (Método)
Hace que el proxy de subproceso asociado a la interfaz pContext
de contexto de ejecución empiece a ejecutarse en esta raíz del procesador virtual.
virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;
Parámetros
pContext
Interfaz al contexto de ejecución que se enviará en esta raíz del procesador virtual.
Comentarios
Resource Manager proporcionará un proxy de subproceso si no hay uno asociado a la interfaz de contexto de ejecución pContext
.
El método Activate
se puede usar para empezar a ejecutar trabajo en una nueva raíz del procesador virtual devuelta por Resource Manager, o para reanudar el proxy de subproceso en una raíz del procesador virtual que se ha desactivado o está a punto de desactivarse. Consulte IVirtualProcessorRoot::Deactivate para más información sobre la desactivación. Al reanudar una raíz de procesador virtual desactivada, el parámetro pContext
debe ser el mismo que el parámetro usado para desactivar la raíz del procesador virtual.
Una vez que una raíz del procesador virtual se ha activado por primera vez, los pares posteriores de llamadas a Deactivate
y Activate
pueden competir entre sí. Esto significa que es aceptable que Resource Manager reciba una llamada a Activate
antes de recibir la llamada a Deactivate
que estaba prevista.
Al activar una raíz del procesador virtual, se indica a Resource Manager que esta raíz del procesador virtual está ocupada actualmente con trabajo. Si el programador no encuentra ningún trabajo para ejecutar en esta raíz, se espera que invoque el método Deactivate
que informa a Resource Manager de que la raíz del procesador virtual está inactiva. Resource Manager usa estos datos para equilibrar la carga del sistema.
Se emite invalid_argument
si el argumento pContext
tiene el valor NULL
.
Se emite invalid_operation
si el argumento pContext
no representa el contexto de ejecución que ha enviado más recientemente esta raíz del procesador virtual.
La acción de activar una raíz del procesador virtual aumenta el nivel de suscripción del subproceso de hardware subyacente en uno. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::D eactivate (Método)
Hace que el proxy de subproceso que se ejecuta actualmente en esta raíz del procesador virtual deje de enviar el contexto de ejecución. El proxy de subproceso reanudará la ejecución al llamar al método Activate
.
virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;
Parámetros
pContext
Contexto que esta raíz envía actualmente.
Valor devuelto
Un valor boolean. Un valor de true
indica que el proxy de subproceso se ha devuelto del método Deactivate
en respuesta a una llamada al método Activate
. Un valor de false
indica que el proxy de subproceso se ha devuelto del método en respuesta a un evento de notificación en Resource Manager. En un programador de subprocesos programables en modo de usuario (UMS), indica que los elementos han aparecido en la lista de finalización del programador y es necesario que el programador los controle.
Comentarios
Use este método para detener temporalmente la ejecución de una raíz del procesador virtual cuando no encuentre ningún trabajo en el programador. Una llamada al método Deactivate
debe originarse en el método Dispatch
del contexto de ejecución con el que se activó por última vez la raíz del procesador virtual. Es decir, el proxy de subproceso que invoca al método Deactivate
debe ser el que se está ejecutando actualmente en la raíz del procesador virtual. Llamar al método en una raíz del procesador virtual en la que no se está ejecutando podría dar lugar a un comportamiento indefinido.
Se puede reactivar una raíz del procesador virtual desactivada con una llamada al método Activate
, con el mismo argumento que se pasó al método Deactivate
. El programador es responsable de garantizar que se emparejan las llamadas a los métodos Activate
y Deactivate
, pero no es necesario que se reciban en un orden específico. Resource Manager puede controlar la recepción de una llamada al método Activate
antes de recibir una llamada al método Deactivate
para el que estaba destinado.
Si se reactiva una raíz del procesador virtual y el valor devuelto del método Deactivate
es false
, el programador debe consultar la lista de finalización de UMS a través del método IUMSCompletionList::GetUnblockNotifications
, actuar sobre esa información y, a continuación, llamar al método Deactivate
de nuevo. Esto debe repetirse hasta que el método Deactivate
devuelva el valor true
.
Se emite invalid_argument
si el argumento pContext
tiene el valor NULL.
Se emite invalid_operation
si la raíz del procesador virtual nunca se ha activado o el argumento pContext
no representa el contexto de ejecución que esta raíz del procesador virtual envió más recientemente.
La acción de desactivar una raíz del procesador virtual reduce el nivel de suscripción del subproceso de hardware subyacente en uno. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::EnsureAllTasksVisible (Método)
Hace que los datos almacenados en la jerarquía de memoria de los procesadores individuales sean visibles para todos los procesadores del sistema. Garantiza que se ha ejecutado una barrera de memoria completa en todos los procesadores antes de que se devuelva el método.
virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;
Parámetros
pContext
Contexto que envía actualmente esta raíz del procesador virtual.
Comentarios
Es posible que este método le resulte útil cuando quiera sincronizar la desactivación de una raíz del procesador virtual con la adición de un nuevo trabajo al programador. Por motivos de rendimiento, puede decidir agregar elementos de trabajo al programador sin ejecutar una barrera de memoria, lo que significa que los elementos de trabajo agregados por un subproceso que se ejecuta en un procesador no son visibles inmediatamente para todos los demás procesadores. Al usar este método junto con el método Deactivate
, puede asegurarse de que el programador no desactiva todas sus raíces del procesador virtual mientras existan elementos de trabajo en las colecciones del programador.
Una llamada al método EnsureAllTasksVisibleThe
debe originarse en el método Dispatch
del contexto de ejecución con el que se activó por última vez la raíz del procesador virtual. Es decir, el proxy de subproceso que invoca al método EnsureAllTasksVisible
debe ser el que se está ejecutando actualmente en la raíz del procesador virtual. Llamar al método en una raíz del procesador virtual en la que no se está ejecutando podría dar lugar a un comportamiento indefinido.
Se emite invalid_argument
si el argumento pContext
tiene el valor NULL
.
Se emite invalid_operation
si la raíz del procesador virtual nunca se ha activado o el argumento pContext
no representa el contexto de ejecución que esta raíz del procesador virtual envió más recientemente.
IVirtualProcessorRoot::GetId (Método)
Devuelve un identificador único para la raíz del procesador virtual.
virtual unsigned int GetId() const = 0;
Valor devuelto
Identificador entero.