Compartir a través de


Barreras de sincronización

Una barrera de sincronización permite que varios subprocesos esperen hasta que todos los subprocesos hayan alcanzado un punto de ejecución determinado antes de que continúe cualquier subproceso. Las barreras de sincronización no se pueden compartir entre procesos.

Las barreras de sincronización son útiles para los cálculos por fases, en los que los subprocesos que ejecutan el mismo código en paralelo deben completar una fase antes de pasar a la siguiente.

Para crear una barrera de sincronización, llame a la función InitializeSynchronizationBarrier y especifique un número máximo de subprocesos y cuántas veces debe girar un subproceso antes de que se bloquee. A continuación, inicie los subprocesos que usarán la barrera. Una vez que cada subproceso finaliza su trabajo, llama a EnterSynchronizationBarrier para esperar a la barrera. La función EnterSynchronizationBarrier bloquea cada subproceso hasta que el número de subprocesos bloqueados en la barrera alcanza el número máximo de subprocesos de la barrera, momento en el que EnterSynchronizationBarrier desbloquea todos los subprocesos. La función EnterSynchronizationBarrier devuelve TRUE para exactamente uno de los subprocesos que han entrado en la barrera y devuelve FALSE para todos los demás subprocesos.

Para liberar una barrera de sincronización cuando ya no sea necesaria, llame a DeleteSynchronizationBarrier. Es seguro llamar a esta función inmediatamente después de llamar a EnterSynchronizationBarrier porque esa función garantiza que todos los subprocesos hayan terminado de usar la barrera antes de que se libere.

Si nunca se eliminará una barrera de sincronización, los subprocesos pueden especificar la marca SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE cuando entran en la barrera. Todos los subprocesos que usen la barrera deben especificar esta marca; Si no lo hace algún subproceso, se omite la marca . Esta marca hace que la función omita el trabajo adicional necesario para la seguridad de eliminación, lo que puede mejorar el rendimiento. Tenga en cuenta que eliminar una barrera mientras esta marca está en vigor puede dar lugar a un acceso de identificador no válido y uno o varios subprocesos bloqueados permanentemente.