同步屏障

同步屏障使多个线程可以等待,直到所有线程都到达特定执行点,然后再继续任何线程。 无法跨进程共享同步屏障。

同步屏障对于分阶段计算非常有用,其中并行执行相同代码的线程必须在继续下一个阶段之前完成一个阶段。

若要创建同步屏障,请调用 InitializeSynchronizationBarrier 函数,并指定线程在阻止之前应旋转的最大线程数以及线程的旋转次数。 然后启动将使用屏障的线程。 每个线程完成其工作后,它会调用 EnterSynchronizationBarrier 等待屏障。 EnterSynchronizationBarrier 函数会阻止每个线程,直到屏障中阻塞的线程数达到屏障的最大线程计数,此时 EnterSynchronizationBarrier 取消阻止所有线程。 EnterSynchronizationBarrier 函数针对进入屏障的线程之一返回 TRUE,并为所有其他线程返回 FALSE

若要在不再需要同步屏障时释放同步屏障,请调用 DeleteSynchronizationBarrier。 调用 EnterSynchronizationBarrier 后立即调用此函数是安全的,因为该函数可确保所有线程在释放前都使用屏障完成。

如果永远不会删除同步屏障,则线程可以在进入屏障时指定 SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 标志。 使用屏障的所有线程都必须指定此标志;如果没有任何线程,则忽略该标志。 此标志会导致函数跳过删除安全性所需的额外工作,从而提高性能。 请注意,当此标志生效时删除屏障可能会导致句柄访问无效,以及一个或多个永久阻止的线程。