CCriticalSection

Um objeto da classe CCriticalSection representa uma "seção crítica" — um objeto de sincronização que permite que um thread por vez para acessar um recurso ou uma seção de código. As seções críticas são úteis quando apenas um thread por vez pode ter permissão para modificar dados ou algum outro recurso controlado. Por exemplo, a adição de nós de uma lista vinculada é um processo que só deve ser permitido por um thread por vez. Usando um objeto CCriticalSection para controlar a lista vinculada, apenas um thread por vez pode obter acessar à lista.

As seções críticas são usadas em vez de exclusões mútuas quando a velocidade é crítica e o recurso não ser usado através de limites processo. Para obter mais informações sobre o uso de semáforos no MFC, consulte CMutex.

Para usar um objeto CCriticalSection , construa o objeto CCriticalSection quando ela é necessária. Você pode acessar a seção crítica quando o construtor retorna. Chamar Desbloquear quando tiver terminado acessar a seção crítica.

Para acessar um recurso controlado por um objeto CCriticalSection dessa maneira, primeiro criar uma variável do tipo CSingleLock na função de membro de acesso do recurso. Em seguida, chame função de membro do objeto bloqueio Lock (por exemplo, CSingleLock::Lock). Neste ponto, seu thread irá acessar o recurso, espere para o recurso ser liberado e obter acesso ou aguarde o recurso para ser lançado e o tempo limite, falhando obter acesso ao recurso. Em qualquer caso, seu recurso foi acessado em uma forma thread-safe. Para versão o recurso, use a função de membro do objeto bloqueio Unlock (por exemplo, CSingleLock:: Unlock) ou permitir que o objeto de bloqueio para ficarem fora do escopo.

Como alternativa, você pode criar um objeto CCriticalSection autônomo e acessá-lo explicitamente antes de tentar acessar o recurso controlado. Este método, enquanto mais claro para alguém ler seu código-fonte, é mais propenso a erro, você deve se lembrar bloquear e desbloquear a seção crítica antes e após o acesso.

Para obter mais informações sobre usando objetos de CCriticalSection , consulte o artigo Multithreading: como usar as Classes de sincronização no Guia do programador do Visual C++.

# include lt;afxmt.h>

Membros da classe |nbsp; Classe base | Gráfico de hierarquia

Amostra  MFC exemplo MTGDI

Co&nsulte tambémnbsp;CMutex

Index