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
, CComMultiThreadModel
e CComSingleThreadModel.
Observação
Os nomes globais typedef
CComObjectThreadModel 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.