Partilhar via


Estrutura IUMSThreadProxy

Uma abstração para um thread de execução. Se quiser que o seu agendador receba threads escalonáveis em modo utilizador (UMS), configure o valor do elemento SchedulerKind da política do escalonador para UmsThreadDefault, e implemente a interface IUMSScheduler. Sistemas operativos de 64 bits apenas suportam threads UMS em versões do Windows 7 e superiores.

Sintaxe

struct IUMSThreadProxy : public IThreadProxy;

Membros

Métodos Públicos

Nome Description
IUMSThreadProxy::EnterCriticalRegion Chamado para entrar numa região crítica. Quando dentro de uma região crítica, o escalonador não irá observar operações de bloqueio assíncronas que ocorrem durante a região. Isto significa que o escalonador não será reintroduzido para falhas de página, suspensões de threads, chamadas de procedimentos assíncronas do kernel (APCs), e assim por diante, para um thread UMS.
IUMSThreadProxy::EnterHyperCriticalRegion Chamado para entrar numa região hipercrítica. Quando se está dentro de uma região hipercrítica, o agendador não perceberá quaisquer operações de bloqueio que ocorram durante a região. Isto significa que o escalonador não será reintroduzido para chamadas de funções bloqueantes, tentativas de aquisição de bloqueio bloqueantes, falhas de página, suspensões de threads, chamadas de procedimentos assíncronos do núcleo (APCs), entre outros, para uma thread UMS.
IUMSThreadProxy::ExitCriticalRegion Chamado para sair de uma região crítica.
IUMSThreadProxy::ExitHyperCriticalRegion Chamado para sair de uma região hipercrítica.
IUMSThreadProxy::GetCriticalRegionType Devolve em que tipo de região crítica se encontra o proxy do thread. Como as regiões hipercríticas são um superconjunto de regiões críticas, se o código entrou numa região crítica e depois numa região hipercrítica, InsideHyperCriticalRegion será devolvido.

Hierarquia de herança

IThreadProxy

IUMSThreadProxy

Requerimentos

Cabeçalho: concrtrm.h

Namespace: simultaneidade

IUMSThreadProxy::Método EnterCriticalRegion

Chamado para entrar numa região crítica. Quando dentro de uma região crítica, o agendador não irá observar operações de bloqueio que não estão sincronizadas que ocorrem durante essa região crítica. Isto significa que o escalonador não será reintroduzido para falhas de página, suspensões de threads, chamadas de procedimentos assíncronas do kernel (APCs), e assim por diante, para um thread UMS.

virtual int EnterCriticalRegion() = 0;

Valor de retorno

A nova profundidade da região crítica. As regiões críticas são reentrantes.

IUMSThreadProxy::EnterHyperCriticalRegion Método

Chamado para entrar numa região hipercrítica. Quando dentro de uma região hipercrítica, o agendador não irá observar quaisquer operações de bloqueio que ocorram durante a região. Isto significa que o escalonador não será reintroduzido para chamadas de funções de bloqueio, tentativas de aquisição de bloqueio que ficam pendentes, falhas de página, suspensões de threads, chamadas de procedimento assíncrono do kernel (APCs) e assim por diante, para uma thread UMS.

virtual int EnterHyperCriticalRegion() = 0;

Valor de retorno

A nova profundidade da região hipercrítica. As regiões hipercríticas são reentrantes.

Observações

O agendador deve ser extremamente cuidadoso com os métodos que chama e quais os bloqueios que adquire nessas áreas. Se o código nessa região bloquear num bloqueio que é mantido por algo que o agendador é responsável pelo agendamento, pode ocorrer um deadlock.

Método IUMSThreadProxy::ExitCriticalRegion

Chamado para sair de uma região crítica.

virtual int ExitCriticalRegion() = 0;

Valor de retorno

A nova profundidade da região crítica. As regiões críticas são reentrantes.

IUMSThreadProxy::ExitHyperCriticalRegion Method

Chamado para sair de uma região hipercrítica.

virtual int ExitHyperCriticalRegion() = 0;

Valor de retorno

A nova profundidade da região hipercrítica. As regiões hipercríticas são reentrantes.

IUMSThreadProxy::GetCriticalRegionType Método

Devolve em que tipo de região crítica se encontra o proxy do thread. Como as regiões hipercríticas são um superconjunto de regiões críticas, se o código entrou numa região crítica e depois numa região hipercrítica, InsideHyperCriticalRegion será devolvido.

virtual CriticalRegionType GetCriticalRegionType() const = 0;

Valor de retorno

O tipo de região crítica em que se encontra o proxy do thread.

Consulte também

concorrência Namespace
Estrutura IUMSScheduler