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 |