Compartilhar via


Classe CComMultiThreadModelNoCS

CComMultiThreadModelNoCS fornece métodos thread-safe para incrementar e decrementar o valor de uma variável, sem a funcionalidade crítica de bloqueio ou desbloqueio de seção.

Sintaxe

class CComMultiThreadModelNoCS

Membros

Typedefs públicos

Nome Descrição
CComMultiThreadModelNoCS::AutoCriticalSection Classe de referências CComFakeCriticalSection.
CComMultiThreadModelNoCS::CriticalSection Classe de referência CComFakeCriticalSection.
CComMultiThreadModelNoCS::ThreadModelNoCS Classe de referência CComMultiThreadModelNoCS.

Métodos públicos

Nome Descrição
CComMultiThreadModelNoCS::Decrement (Estático) Decrementa o valor da variável especificada de maneira thread-safe.
CComMultiThreadModelNoCS::Increment (Estático) Incrementa o valor da variável especificada de maneira thread-safe.

Comentários

CComMultiThreadModelNoCS é similar a CComMultiThreadModel no fornecimento de métodos thread-safe para incrementar e decrementar uma variável. No entanto, quando você faz referência a uma classe de seção crítica por meio de CComMultiThreadModelNoCS, métodos como Lock e Unlock não terão efeito.

Normalmente, você usa CComMultiThreadModelNoCS através do ThreadModelNoCS typedef nome. Esse typedef é definido em CComMultiThreadModelNoCS, CComMultiThreadModele CComSingleThreadModel.

Observação

Os nomes globais typedefCComObjectThreadModel e CComGlobalsThreadModel não fazem referência a CComMultiThreadModelNoCS.

Além de ThreadModelNoCS, CComMultiThreadModelNoCS define AutoCriticalSection e CriticalSection. Esses dois últimos nomes typedef fazem referência a CComFakeCriticalSection, que fornece métodos vazios associados à obtenção e liberação de uma seção crítica.

Requisitos

Cabeçalho: atlbase.h

CComMultiThreadModelNoCS::AutoCriticalSection

Ao usar CComMultiThreadModelNoCS, o nome typedef AutoCriticalSection faz referência à classe CComFakeCriticalSection.

typedef CComFakeCriticalSection AutoCriticalSection;

Comentários

Por CComFakeCriticalSection não fornecer uma seção crítica, seus métodos não fazem nada.

CComMultiThreadModel and CComSingleThreadModel também contêm definições para AutoCriticalSection. A seguinte tabela mostra a relação entre a classe de modelo de threading e a classe de seção crítica referenciada por AutoCriticalSection:

Classe definida em Classe referenciada
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComAutoCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Além de AutoCriticalSection, você pode usar o nome typedef CriticalSection. Você não deverá especificar AutoCriticalSection em objetos globais ou membros de classe estática se quiser eliminar o código de inicialização CRT.

Exemplo

Confira CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::CriticalSection

Ao usar CComMultiThreadModelNoCS, o nome typedef CriticalSection faz referência à classe CComFakeCriticalSection.

typedef CComFakeCriticalSection CriticalSection;

Comentários

Por CComFakeCriticalSection não fornecer uma seção crítica, seus métodos não fazem nada.

CComMultiThreadModel and CComSingleThreadModel também contêm definições para CriticalSection. A seguinte tabela mostra a relação entre a classe de modelo de threading e a classe de seção crítica referenciada por CriticalSection:

Classe definida em Classe referenciada
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Além de CriticalSection, você pode usar o AutoCriticalSection do nome typedef. Você não deverá especificar AutoCriticalSection em objetos globais ou membros de classe estática se quiser eliminar o código de inicialização CRT.

Exemplo

Confira CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::Decrement

Essa função estática chama a função InterlockedDecrement do Win32, que decrementa o valor da variável apontada por p.

static ULONG WINAPI Decrement(LPLONG p) throw();

Parâmetros

p
[entrada] Ponteiro para a variável a ser decrementada.

Valor de retorno

Se o resultado do decremento for 0, Decrement retornará 0. Se o resultado do decremento for diferente de zero, o valor retornado também será diferente de zero, mas poderá não ser igual ao resultado do decremento.

Comentários

InterlockedDecrement impede que mais de um thread use simultaneamente essa variável.

CComMultiThreadModelNoCS::Increment

Essa função estática chama a função InterlockedIncrement do Win32, que incrementa o valor da variável apontada por p.

static ULONG WINAPI Increment(LPLONG p) throw();

Parâmetros

p
[entrada] Ponteiro para a variável a ser incrementada.

Valor de retorno

Se o resultado do incremento for 0, Incremento retornará 0. Se o resultado do incremento for diferente de zero, o valor retornado também será diferente de zero, mas poderá não ser igual ao resultado do incremento.

Comentários

InterlockedIncrement impede que mais de um thread use simultaneamente essa variável.

CComMultiThreadModelNoCS::ThreadModelNoCS

Ao usar CComMultiThreadModelNoCS, o nome typedef ThreadModelNoCS simplesmente faz referência a CComMultiThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Comentários

CComMultiThreadModel and CComSingleThreadModel também contêm definições para ThreadModelNoCS. A seguinte tabela mostra a relação entre a classe de modelo de threading e a classe referenciada por ThreadModelNoCS:

Classe definida em Classe referenciada
CComMultiThreadModelNoCS CComMultiThreadModelNoCS
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel

Observe que a definição de ThreadModelNoCS em CComMultiThreadModelNoCS fornece simetria com CComMultiThreadModel e CComSingleThreadModel. Por exemplo, suponha que o código de exemplo em CComMultiThreadModel::AutoCriticalSection declarou o typedef seguinte:

typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;

Seja qual for a classe especificada para ThreadModel (como CComMultiThreadModelNoCS), _ThreadModel resolve adequadamente.

Exemplo

Confira CComMultiThreadModel::AutoCriticalSection.

Confira também

Visão geral da aula