Compartilhar via


Semáforos

The Semaphore classe representa um nomeado (todo o sistema) ou sinal local. Windows semáforos estão contando semáforos, que podem ser usados para controlar o acesso a um pool de recursos.

Gerenciamento de um recurso limitado

Threads para inserir o sinal, chamando o WaitOne método, que é herdado das WaitHandle classe. Quando a telefonar retorna, a contagem no sinal é diminuída.Quando um thread solicitações de entrada e a contagem é zero, os blocos de thread.sistema autônomo o sinal de versão de segmentos chamando o Release método, threads bloqueados podem inserir. Não há uma ordem garantida (por exemplo, PEPS ou UEPS) para threads bloqueados inserir o sinal.

Um thread pode inserir o sinal várias vezes, chamando o WaitOne método repetidamente. Para versão sinal, o thread ou pode chamar o Release() o mesmo número de vezes de sobrecarga de método ou ligue para o Release(Int32) método de sobrecarga e especifique o número de entradas a ser versão d.

Semáforos e identidade de thread

The Semaphore classe não impõe thread identidade em chamadas para o WaitOne e Release métodos. Por exemplo, um cenário de uso comum de semáforos envolve um thread de produtor e um consumidor thread, com um thread sempre incrementando a contagem de sinal e o Outros sempre Decrescendo-lo.

É responsabilidade do programador para garantir que um segmento não libera o sinal muitas vezes.Por exemplo, suponha que um sinal tem uma contagem máxima de dois e esse thread A e o thread B entram o sinal.Se um erro de programação em thread B faz com que ele chame Release duas vezes, as duas chamadas teve êxito. A contagem do sinal está cheio e quando thread A chama eventualmente Release, um SemaphoreFullException é lançada.

Semáforos nomeados

O sistema de operacional do Windows que permite semáforos ter nomes.Um sinal com nome é todo o sistema.Ou seja, uma vez criado o sinal com nome, é visível para todos os threads de todos os processos.Assim, sinal com nome pode ser usado para sincronizar sistema autônomo atividades de processos, bem sistema autônomo segmentos.

Você pode criar um Semaphore objeto que representa um sinal de sistema nomeado usando um dos construtores que especifica um nome.

Observação:

Como semáforos nomeados são sistema largo, é possível ter vários Semaphore objetos que representam o mesmo nome sinal. Sempre que você chamar um construtor ou o OpenExisting método, um novo Semaphore objeto é criado. Especificando o mesmo nome repetidamente cria vários objetos que representam o mesmo sinal com nome.

Cuidado é aconselhável usando chamado semáforos.Como são todo o sistema, outro processo que usa o mesmo nome pode inserir o sinal inesperadamente.O código mal-intencionado executado no mesmo computador pode usar isso sistema autônomo a base de um ataque de negação de serviço.

Usar segurança de controle de acesso para proteger um Semaphore objeto que representa um sinal com nome, de preferência, usando um construtor que especifica um SemaphoreSecurity objeto. Você também pode aplicar a segurança do controle de acesso usando o SetAccessControl método, mas deixa uma janela de vulnerabilidade entre o momento em que o sinal é criado e o time que ele está protegido. Protegendo semáforos com segurança de controle de acesso ajuda a impedir ataques maliciosos, mas não resolve o problema de conflitos de nome não-intencional.

Consulte também

Referência

Semaphore

Outros recursos

Recursos e objetos de Threading