Compartilhar via


Classe CSemaphore

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

class CSemaphore : public CSyncObject

Comentários

Semáforos são úteis para controlar o acesso a um recurso compartilhado que oferece suporte somente a um número limitado de usuários.A contagem corrente do CSemaphore objeto é o número de usuários adicionais permitido. Quando a contagem chegar a zero, todas tenta usar o recurso controlado pelo CSemaphore objeto será inserido em uma fila de sistema e aguarde até que eles esgotar o time limite ou a contagem aumenta acima de 0.O número máximo de usuários que podem acesso simultaneamente o recurso controlado é especificado durante a construção do CSemaphore objeto.

Para usar um CSemaphore de objeto, construir o CSemaphore objeto quando for necessário. Especifique o nome do sinal que deseja aguardar e que seu aplicativo deve inicialmente possui.Você pode então acesso sinal quando retorna do construtor. De telefonarCSyncObject::Unlock quando tiver concluído o acesso ao recurso controlado.

Um método alternativo para o uso de CSemaphore objetos é adicionar uma variável do tipo CSemaphore sistema autônomo um membro de dados para a classe você deseja controle. Durante a construção do objeto controlado, telefonar o construtor do CSemaphore membro de dados especificando a contagem de acesso iniciais, a contagem máxima de acesso, o nome da sinal (se ele for usado em limites de processo) e atributos de segurança desejado.

Para acessar os recursos controlados por CSemaphore objetos dessa forma, primeiro criar uma variável de qualquer tipo CSingleLock or type CMultiLock na função de membro de acesso do seu recurso.Em seguida, telefonar Lock função de membro (por exemplo, CSingleLock::bloquear).Neste ponto, seu thread irá ou acessar o recurso, aguardar que o recurso ser liberado e obter acesso ou esperar que o recurso a ser liberado e o time limite, que não consegue obter acesso ao recurso.Em qualquer caso, o recurso foi acessado de uma forma thread-safe.Para liberar o recurso, use Unlock função de membro (por exemplo, CSingleLock::Unlock), ou permitir que o objeto bloquear ficarem fora do escopo.

Como alternativa, você pode criar um CSemaphore objeto independente e acessá-lo explicitamente antes de tentar acessar o recurso controlado.Esse método, ao mesmo tempo possamos para alguém ler seu código fonte, é mais propenso a erros.

Para obter mais informações sobre como usar CSemaphore objetos, consulte o artigo Multithreading: Como usar a sincronização classes.

Requisitos

Cabeçalho: afxmt.h

Consulte também

Referência

Classe CSyncObject

Gráfico de hierarquia

Outros recursos

CSemaphore membros