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
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.