Função EnterSynchronizationBarrier (synchapi.h)
Faz com que o thread de chamada aguarde em uma barreira de sincronização até que o número máximo de threads tenha entrado na barreira.
Sintaxe
BOOL EnterSynchronizationBarrier(
[in, out] LPSYNCHRONIZATION_BARRIER lpBarrier,
[in] DWORD dwFlags
);
Parâmetros
[in, out] lpBarrier
Um ponteiro para uma barreira de sincronização inicializada. Use a função InitializeSynchronizationBarrier para inicializar a barreira. SYNCHRONIZATION_BARRIER é uma estrutura opaca que não deve ser modificada pelo aplicativo.
[in] dwFlags
Sinalizadores que controlam o comportamento dos threads que entram nessa barreira. Esse parâmetro pode usar um dos valores a seguir:
Valor | Significado |
---|---|
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY | Especifica que o thread que entra na barreira deve ser bloqueado imediatamente até que o último thread entre na barreira. Para obter mais informações, consulte Comentários. |
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY | Especifica que o thread que entra na barreira deve girar até que o último thread entre na barreira, mesmo que o thread giratório exceda a contagem máxima de rotação da barreira. Para obter mais informações, consulte Comentários. |
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE | Especifica que a função pode ignorar o trabalho necessário para garantir que seja seguro excluir a barreira, o que pode melhorar o desempenho. Todos os threads que inserem essa barreira devem especificar o sinalizador; caso contrário, o sinalizador será ignorado. Esse sinalizador só deverá ser usado se a barreira nunca for excluída. |
Retornar valor
TRUE
para o último thread sinalizar a barreira. Threads que sinalizam a barreira antes do último thread sinalizam que ela recebe um valor retornado de FALSE
.
Comentários
O comportamento padrão para threads que entram em uma barreira de sincronização é girar até que a contagem máxima de rotação da barreira seja atingida e, em seguida, bloquear. Isso permite que os threads retomem rapidamente se o último thread entrar na barreira em um tempo relativamente curto. No entanto, se o último thread demorar relativamente mais tempo para chegar, os threads já estão no bloco de barreira para que eles parem de consumir o tempo do processador enquanto aguardam.
Um thread pode substituir o comportamento padrão da barreira especificando SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY ou SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY. No entanto, tenha em mente que o uso desses sinalizadores pode afetar o desempenho. Girar indefinidamente impede um processador de atender outros threads, enquanto o bloqueio prematuro incorre na sobrecarga de trocar o thread do processador, despertar o thread quando ele é desbloqueado e trocá-lo novamente para o processador. Em geral, é melhor permitir que a barreira gerencie threads e use esses sinalizadores somente se o teste de desempenho indicar que o aplicativo se beneficiaria deles.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2012 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | synchapi.h |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |