Función EnterSynchronizationBarrier (synchapi.h)

Hace que el subproceso de llamada espere a una barrera de sincronización hasta que el número máximo de subprocesos haya entrado en la barrera.

Sintaxis

BOOL EnterSynchronizationBarrier(
  [in, out] LPSYNCHRONIZATION_BARRIER lpBarrier,
  [in]      DWORD                     dwFlags
);

Parámetros

[in, out] lpBarrier

Puntero a una barrera de sincronización inicializada. Use la función InitializeSynchronizationBarrier para inicializar la barrera. SYNCHRONIZATION_BARRIER es una estructura opaca que la aplicación no debe modificar.

[in] dwFlags

Marcas que controlan el comportamiento de los subprocesos que entran en esta barrera. Este parámetro puede ser uno o más de los siguientes valores:

Valor Significado
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY Especifica que el subproceso que entra en la barrera debe bloquearse inmediatamente hasta que el último subproceso entre en la barrera. Para obtener más información, vea la sección Comentarios.
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY Especifica que el subproceso que entra en la barrera debe girar hasta que el último subproceso entre en la barrera, incluso si el subproceso giratorio supera el número máximo de giros de la barrera. Para obtener más información, vea la sección Comentarios.
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE Especifica que la función puede omitir el trabajo necesario para asegurarse de que es seguro eliminar la barrera, lo que puede mejorar el rendimiento. Todos los subprocesos que entran en esta barrera deben especificar la marca; de lo contrario, se omite la marca. Esta marca solo se debe usar si la barrera nunca se eliminará.

Valor devuelto

TRUE para que el último subproceso señale la barrera. Subprocesos que indican la barrera antes de que el último subproceso señale que recibe un valor devuelto de FALSE.

Comentarios

El comportamiento predeterminado para los subprocesos que entran en una barrera de sincronización es girar hasta que se alcanza el número máximo de giros de la barrera y, a continuación, bloquear. Esto permite que los subprocesos se reanuden rápidamente si el último subproceso entra en la barrera en un tiempo relativamente corto. Sin embargo, si el último subproceso tarda relativamente más tiempo en llegar, los subprocesos que ya están en el bloque de barreras para dejar de consumir tiempo de procesador mientras esperan.

Un subproceso puede invalidar el comportamiento predeterminado de la barrera especificando SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY o SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY. Sin embargo, tenga en cuenta que el uso de estas marcas puede afectar al rendimiento. Girar indefinidamente evita que un procesador de mantenimiento de otros subprocesos, mientras que el bloqueo prematuro incurre en la sobrecarga de intercambiar el subproceso fuera del procesador, despertar el subproceso cuando se desbloquea y cambiarlo de nuevo al procesador. En general, es mejor permitir que la barrera administre subprocesos y use estas marcas solo si las pruebas de rendimiento indican que la aplicación se beneficiaría de ellos.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado synchapi.h
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

DeleteSynchronizationBarrier

InitializeSynchronizationBarrier

Barreras de sincronización

API de Vertdll disponibles en enclaves de VBS