CSemaphore

Um objeto da classe CSemaphore representa um "semáforo" — um objeto de sincronização que permite que um número limitado de threads em um ou mais processos para acessar um recurso. Um objeto de CSemaphore mantém uma contagem do número de segmentos atualmente acessando um recurso especificado.

Semáforos são úteis para controlar o acesso a um recurso compartilhado que suporta apenas um número limitado de usuários. A contagem atual do objeto CSemaphore é o número de usuários adicionais permitidas. Quando a contagem atinge zero, todas as tentativas de usar o recurso controlado pelo objeto de CSemaphore serão inseridas em uma fila de sistema e esperar até que o tempo limite ou a contagem sobe acima de 0. O número máximo de usuários que podem acessar o recurso controlado de uma só vez é especificado durante a construção do objeto CSemaphore.

Para usar um objeto de CSemaphore , construa o objeto de CSemaphore , quando necessário. Especifique o nome do semáforo você deseja aguardar, e que seu aplicativo deve inicialmente ele próprio. Você pode acessar o semáforo quando o construtor retorna. Chamar CSyncObject::Unlock quando tiver terminado acessar o recurso controlado.

Um método alternativo para usar objetos CSemaphore é adicionar uma variável do tipo CSemaphore como um membro de dados para a classe que você deseja controlar. Durante a construção do objeto controlado, chamar o Construtor do membro de dados de CSemaphore especificando a contagem de acesso inicial, contagem de acesso máximo, nome do semáforo (se ele será usado através de limites de processo) e desejar atributos de segurança.

Para acessar recursos contolled por objetos CSemaphore dessa maneira, primeiro criar uma variável de qualquer tipo CSingleLock ou digite CMultiLock 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 de CSemaphore 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.

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

# include lt;afxmt.h>

Membros da classeClasse base | Gráfico de hierarquia

Amostra  MFC exemplo exclusões mútuas

Index