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 |