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

IExecutionResource

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.

Consulte también

concurrency (espacio de nombres)