Compartilhar via


Estrutura IUMSThreadProxy

Uma abstração para um thread de execução. Se você quiser que o agendador tenha threads agendados (UMS) no modo de usuário, defina o valor para o elemento de política do agendador SchedulerKind para UmsThreadDefault e implemente a interface IUMSScheduler. Os threads UMS têm suporte apenas em sistemas operacionais de 64 bits com a versão Windows 7 e superior.

Sintaxe

struct IUMSThreadProxy : public IThreadProxy;

Membros

Métodos públicos

Nome Descrição
IUMSThreadProxy::EnterCriticalRegion Chamado para inserir uma região crítica. Quando estiver dentro de uma região crítica, o agendador não observará operações de bloqueio assíncronas que ocorrem durante a região. Isso significa que o agendador não será reentrado para falhas de página, suspensões de thread, APCs (chamadas de procedimento assíncrono) do kernel e assim por diante, para um thread UMS.
IUMSThreadProxy::EnterHyperCriticalRegion Chamado para inserir em uma região hipercrítica. Quando estiver dentro de uma região hipercrítica, o agendador não observará nenhuma operação de bloqueio que ocorrem durante a região. Isso significa que o agendador não será reentrado para bloquear chamadas de função, bloquear tentativas de aquisição que bloqueiam, falhas de página, suspensões de thread, APCs (chamadas de procedimento assíncrono) do kernel e assim por diante, para um thread UMS.
IUMSThreadProxy::ExitCriticalRegion Chamado para sair de uma região crítica.
IUMSThreadProxy::ExitHyperCriticalRegion Chamado para sair em uma região hipercrítica.
IUMSThreadProxy::GetCriticalRegionType Retorna em que tipo de região crítica o proxy de thread está dentro. Como as regiões hipercríticas são um superconjunto de regiões críticas, se o código tiver inserido uma região crítica e, em seguida, uma região hipercrítica, InsideHyperCriticalRegion será retornado.

Hierarquia de herança

IThreadProxy

IUMSThreadProxy

Requisitos

Cabeçalho: concrtrm.h

Namespace: concurrency

Método IUMSThreadProxy::EnterCriticalRegion

Chamado para inserir uma região crítica. Quando estiver dentro de uma região crítica, o agendador não observará operações de bloqueio assíncronas que ocorrem durante a região. Isso significa que o agendador não será reentrado para falhas de página, suspensões de thread, APCs (chamadas de procedimento assíncrono) do kernel e assim por diante, para um thread UMS.

virtual int EnterCriticalRegion() = 0;

Valor de retorno

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

Método IUMSThreadProxy::EnterHyperCriticalRegion

Chamado para inserir em uma região hipercrítica. Quando estiver dentro de uma região hipercrítica, o agendador não observará nenhuma operação de bloqueio que ocorrem durante a região. Isso significa que o agendador não será reentrado para bloquear chamadas de função, bloquear tentativas de aquisição que bloqueiam, falhas de página, suspensões de thread, APCs (chamadas de procedimento assíncrono) do kernel e assim por diante, para um thread UMS.

virtual int EnterHyperCriticalRegion() = 0;

Valor de retorno

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

Comentários

O agendador deve ser extraordinariamente cuidadoso sobre quais métodos ele chama e quais bloqueios ele adquire nessas regiões. Se o código em tais blocos de região em um bloqueio que é mantido por algo que o agendador é responsável pelo agendamento, o deadlock pode ocorrer.

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. Regiões críticas são reentrantes.

Método IUMSThreadProxy::ExitHyperCriticalRegion

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

virtual int ExitHyperCriticalRegion() = 0;

Valor de retorno

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

Método IUMSThreadProxy::GetCriticalRegionType

Retorna em que tipo de região crítica o proxy de thread está dentro. Como as regiões hipercríticas são um superconjunto de regiões críticas, se o código tiver inserido uma região crítica e, em seguida, uma região hipercrítica, InsideHyperCriticalRegion será retornado.

virtual CriticalRegionType GetCriticalRegionType() const = 0;

Valor de retorno

O tipo de região crítica em que o proxy de thread está dentro.

Confira também

Namespace de simultaneidade
Estrutura IUMSScheduler