Compartilhar via


Função ReleaseSemaphore (synchapi.h)

Aumenta a contagem do objeto semáforo especificado em uma quantidade especificada.

Sintaxe

BOOL ReleaseSemaphore(
  [in]            HANDLE hSemaphore,
  [in]            LONG   lReleaseCount,
  [out, optional] LPLONG lpPreviousCount
);

Parâmetros

[in] hSemaphore

Um identificador para o objeto semáforo. A função CreateSemaphore ou OpenSemaphore retorna esse identificador.

Esse identificador deve ter o acesso de SEMAPHORE_MODIFY_STATE correto. Para obter mais informações, consulte Segurança do objeto de sincronização e direitos de acesso.

[in] lReleaseCount

A quantidade pela qual a contagem atual do objeto semáforo deve ser aumentada. O valor deve ser maior que zero. Se o valor especificado fizer com que a contagem do semáforo exceda a contagem máxima especificada quando o semáforo foi criado, a contagem não será alterada e a função retornará FALSE.

[out, optional] lpPreviousCount

Um ponteiro para uma variável para receber a contagem anterior do semáforo. Esse parâmetro poderá ser NULL se a contagem anterior não for necessária.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

O estado de um objeto semáforo é sinalizado quando sua contagem é maior que zero e não atribuída quando sua contagem é igual a zero. O processo que chama a função CreateSemaphore especifica a contagem inicial do semáforo. Sempre que um thread de espera é liberado devido ao estado sinalizado do semáforo, a contagem do semáforo é reduzida em um.

Normalmente, um aplicativo usa um semáforo para limitar o número de threads usando um recurso. Antes que um thread use o recurso, ele especifica o identificador de semáforo em uma chamada para uma das funções de espera. Quando a função de espera retorna, ela diminui a contagem do semáforo em um. Quando o thread terminar de usar o recurso, ele chamará ReleaseSemaphore para aumentar a contagem do semáforo em um.

Outro uso de ReleaseSemaphore é durante a inicialização de um aplicativo. O aplicativo pode criar um semáforo com uma contagem inicial de zero. Isso define o estado do semáforo como não atribuído e impede que todos os threads acessem o recurso protegido. Quando o aplicativo conclui sua inicialização, ele usa ReleaseSemaphore para aumentar a contagem para seu valor máximo, para permitir o acesso normal ao recurso protegido.

Não é possível reduzir a contagem de objetos de semáforo usando ReleaseSemaphore, pois lReleaseCount não pode ser um número negativo. Para restringir ou reduzir temporariamente o acesso, crie um loop no qual você chama a função WaitForSingleObject com um intervalo de tempo limite zero até que a contagem de semáforos seja reduzida o suficiente. (Observe que outros threads podem reduzir a contagem enquanto esse loop está sendo executado.) Para restaurar o acesso, chame ReleaseSemaphore com a contagem de versões igual ao número de vezes que WaitForSingleObject foi chamado no loop.

Exemplos

Para obter um exemplo que usa ReleaseSemaphore, consulte Usando objetos semáforos.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho synchapi.h (inclua Windows.h no Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

Createsemaphore

OpenSemaphore

Objetos semáforos

Funções de sincronização