Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Uma abstração de um thread de hardware num qual um proxy de thread pode ser executado.
Sintaxe
struct IVirtualProcessorRoot : public IExecutionResource;
Membros
Métodos Públicos
| Nome | Description |
|---|---|
| IVirtualProcessorRoot::Ativar | Faz com que o proxy de thread associado à interface de contexto de execução pContext comece a executar neste núcleo do processador virtual. |
| IVirtualProcessorRoot::Deactivate | Faz com que o proxy de thread que está atualmente a executar nesta raiz do processador virtual pare de despachar o contexto de execução. O proxy do thread retomará a execução numa chamada ao Activate método. |
| IVirtualProcessorRoot::EnsureAllTasksVisible | Faz com que os dados armazenados na hierarquia de memória dos processadores individuais se tornem visíveis para todos os processadores do sistema. Garante que, antes do método retornar, uma barreira de memória completa tenha sido executada em todos os processadores. |
| IVirtualProcessorRoot::GetId | Devolve um identificador único para a raiz do processador virtual. |
Observações
Cada raiz de processador virtual tem um recurso de execução associado. A IVirtualProcessorRoot interface herda da interface IExecutionResource . Múltiplas raízes de processadores virtuais podem corresponder ao mesmo fio de hardware subjacente.
O Gestor de Recursos concede raízes de processadores virtuais aos agendadores em resposta a pedidos de recursos. Um escalonador pode usar um núcleo virtual de processador para realizar trabalho, ativando-o com um contexto de execução.
Hierarquia de herança
IVirtualProcessorRoot
Requerimentos
Cabeçalho: concrtrm.h
Namespace: simultaneidade
Método IVirtualProcessorRoot::Activate
Faz com que o proxy de thread associado à interface de contexto de execução pContext comece a executar neste processador raiz virtual.
virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;
Parâmetros
pContexto
Uma interface para o contexto de execução que será executada neste núcleo virtual do processador.
Observações
O Gestor de Recursos fornecerá um proxy de thread se não estiver associado à interface de contexto de execução pContext
O Activate método pode ser usado para iniciar a execução de trabalho numa nova raiz de processador virtual devolvida pelo Gestor de Recursos, ou para retomar o proxy de thread numa raiz de processador virtual que tenha sido desativada ou esteja prestes a desativar. Consulte IVirtualProcessorRoot::Deactivate para mais informações sobre a desativação. Quando retoma uma raiz de processador virtual desativada, o parâmetro pContext deve ser o mesmo que o parâmetro usado para desativar a raiz do processador virtual.
Uma vez que a raiz do processador virtual é ativada pela primeira vez, pares subsequentes de chamadas para Deactivate e Activate podem competir entre si. Isto significa que é aceitável que o Gestor de Recursos receba uma chamada Activate antes de receber a Deactivate chamada para a qual foi destinado.
Quando ativa uma raiz de processador virtual, sinaliza ao Gestor de Recursos que essa raiz de processador virtual está atualmente ocupada com trabalho. Se o seu escalonador não conseguir encontrar qualquer trabalho para executar nesta raiz, espera-se que invoque o Deactivate método informando o Gestor de Recursos de que a raiz do processador virtual está inativa. O Gestor de Recursos utiliza estes dados para balancear a carga do sistema.
invalid_argument é lançado se o argumento pContext tiver o valor NULL.
invalid_operation é lançado se o argumento pContext não representar o contexto de execução que foi mais recentemente remetido por este processador virtual raiz.
O ato de ativar a raiz de um processador virtual aumenta o nível de subscrição do thread de hardware subjacente em um. Para mais informações sobre níveis de subscrição, consulte IExecutionResource::CurrentSubscriptionLevel.
Método IVirtualProcessorRoot::Deactivate
Faz com que o proxy de thread que está atualmente a executar nesta raiz do processador virtual pare de despachar o contexto de execução. O proxy do thread retomará a execução numa chamada ao Activate método.
virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;
Parâmetros
pContexto
O contexto que está atualmente a ser transferido por esta raiz.
Valor de retorno
Um valor booleano. Um valor de true indica que o proxy do thread retornou do método Deactivate em resposta a uma chamada ao método Activate. Um valor de false indica que o proxy do thread retornou do método em resposta a um evento de notificação no Gestor de Recursos. Num escalonador de threads em modo utilizador (UMS), isto indica que itens apareceram na lista de conclusão do escalonador, e cabe ao escalonador tratá-los.
Observações
Use este método para parar temporariamente a execução de um núcleo de processador virtual quando não conseguir encontrar quaisquer tarefas no seu agendador. Uma chamada ao Deactivate método deve originar-se dentro do Dispatch método do contexto de execução com o qual a raiz do processador virtual foi ativada pela última vez. Por outras palavras, o proxy de thread que invoca o método Deactivate deve ser aquele que está atualmente a executar sobre a raiz do processador virtual. Chamar o método numa raiz de processador virtual onde não está a executar pode resultar num comportamento indefinido.
Uma raiz virtual de processador desativada pode ser despertada com uma chamada ao Activate método, com o mesmo argumento que foi passado ao Deactivate método. O agendador é responsável por garantir que as chamadas para os métodos Activate e Deactivate sejam emparelhadas, mas não são obrigadas a serem recebidas numa ordem específica. O Gestor de Recursos pode tratar de receber uma chamada para o Activate método antes de este receber uma chamada para o Deactivate método para o qual foi concebido.
Se a raiz de um processador virtual se ativar e o valor de retorno do método Deactivate for o valor false, o agendador deve consultar a lista de conclusão do UMS usando o método IUMSCompletionList::GetUnblockNotifications, agir de acordo com essa informação e então, subsequentemente, chamar novamente o método Deactivate. Isto deve ser repetido até que o Deactivate método devolva o valor true.
invalid_argument é lançado se o argumento pContext tiver o valor NULL.
invalid_operation é lançado se a raiz do processador virtual nunca tiver sido ativada, ou se o argumento pContext não representar o contexto de execução que foi mais recentemente despachado por esta raiz do processador virtual.
O ato de desativar a raiz de um processador virtual diminui o nível de subscrição do thread de hardware subjacente em um. Para mais informações sobre níveis de subscrição, consulte IExecutionResource::CurrentSubscriptionLevel.
Método IVirtualProcessorRoot::EnsureAllTasksVisible
Faz com que os dados armazenados na hierarquia de memória dos processadores individuais se tornem visíveis para todos os processadores do sistema. Garante que, antes do método retornar, uma barreira de memória completa tenha sido executada em todos os processadores.
virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;
Parâmetros
pContexto
O contexto que está atualmente a ser despachado por esta raiz de processador virtual.
Observações
Pode achar este método útil quando quiser sincronizar a desativação de uma raiz de processador virtual com a adição de novo trabalho no agendador. Por razões de desempenho, pode decidir adicionar itens de trabalho ao seu agendador sem executar uma barreira de memória, o que significa que os itens de trabalho adicionados por uma thread a executar num processador não são imediatamente visíveis para todos os outros processadores. Ao utilizar este método em conjunto com o método Deactivate, pode garantir que o seu agendador mantém ativas todas as raízes do processador virtual enquanto existirem itens de trabalho nas coleções do seu agendador.
Uma chamada ao EnsureAllTasksVisibleThe método deve originar-se dentro do Dispatch método do contexto de execução com o qual a raiz do processador virtual foi ativada pela última vez. Por outras palavras, o proxy da thread que invoca o método EnsureAllTasksVisible deve ser aquele que está atualmente a ser executado na raiz do processador virtual. Chamar o método numa raiz de processador virtual onde não está a executar pode resultar num comportamento indefinido.
invalid_argument é lançado se o argumento pContext tiver o valor NULL.
invalid_operation é lançado se a raiz do processador virtual nunca tiver sido ativada, ou se o argumento pContext não representar o contexto de execução que foi mais recentemente despachado por esta raiz do processador virtual.
IVirtualProcessorRoot::GetId Método
Devolve um identificador único para a raiz do processador virtual.
virtual unsigned int GetId() const = 0;
Valor de retorno
Um identificador inteiro.