Compartilhar via


CComMultiThreadModel::AutoCriticalSection

Ao usar CComMultiThreadModel, o typedef nome AutoCriticalSection referências de classe CComAutoCriticalSection, que fornece métodos para obter e liberação de propriedade de um objeto de seção crítica.

typedef CComAutoCriticalSection AutoCriticalSection;

Comentários

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

Classe definida em

Classe referenciado

CComMultiThreadModel

CComCriticalSection

CComSingleThreadModel

CComFakeCriticalSection

CComMultiThreadModelNoCS

CComFakeCriticalSection

Em adição a AutoCriticalSection, você pode usar o typedef nome CriticalSection.Você não deve especificar AutoCriticalSection em objetos global ou membros da classe estática para eliminar o código de inicialização do CRT.

Exemplo

O código a seguir é modelado CComObjectRootExe demonstra AutoCriticalSection que está sendo usado em um ambiente de threading.

template< class ThreadModel >
class CMyAutoCritClass
{
public:
   typedef ThreadModel _ThreadModel;
   typedef typename _ThreadModel::AutoCriticalSection _CritSec;

   CMyAutoCritClass() : m_dwRef(0) {}

   ULONG InternalAddRef()
   {
      return _ThreadModel::Increment(&m_dwRef);
   }
   ULONG InternalRelease()
   {
      return _ThreadModel::Decrement(&m_dwRef);   
   }
   void Lock() { m_critsec.Lock( ); }
   void Unlock() { m_critsec.Unlock(); }

private:
   _CritSec m_critsec;
   LONG m_dwRef;
};

As tabelas a seguir mostram os resultados do InternalAddRef e Lock métodos, dependendo da ThreadModel parâmetro do modelo e o modelo de threading usado pelo aplicativo:

ThreadModel = CComObjectThreadModel

Método

Único ou Apartment Threading

disponível de Threading

InternalAddRef

O incremento não é thread-safe.

O incremento é thread-safe.

Lock

Não faz nada; não há uma seção crítica para bloquear.

A seção crítica está bloqueada.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Método

Único ou Apartment Threading

disponível de Threading

InternalAddRef

O incremento não é thread-safe.

O incremento é thread-safe.

Lock

Não faz nada; não há uma seção crítica para bloquear.

Não faz nada; não há uma seção crítica para bloquear.

Requisitos

Cabeçalho: atlbase.h

Consulte também

Referência

Classe CComMultiThreadModel

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS

Outros recursos

CComMultiThreadModel membros