Share via


同步處理屏障

同步處理屏障可讓多個執行緒等到所有線程都到達特定執行點,再繼續任何執行緒。 無法跨進程共用同步處理屏障。

同步處理屏障適用于階段式計算,其中平行執行相同程式碼的執行緒必須先完成一個階段,再繼續進行下一個階段。

若要建立同步處理屏障,請呼叫 InitializeSynchronizationBarrier 函式,並指定執行緒在區塊之前應該旋轉的執行緒數目上限和次數。 然後啟動將使用屏障的執行緒。 在每個執行緒完成其工作之後,它會呼叫 EnterSynchronizationBarrier 以等候屏障。 EnterSynchronizationBarrier函式會封鎖每個執行緒,直到屏障中封鎖的執行緒數目達到屏障的最大執行緒計數為止,此時EnterSynchronizationBarrier會解除封鎖所有線程。 EnterSynchronizationBarrier函式會針對進入屏障的其中一個執行緒傳回TRUE,並針對所有其他執行緒傳回FALSE

若要在不再需要同步處理屏障時釋放同步處理屏障,請呼叫 DeleteSynchronizationBarrier。 在呼叫 EnterSynchronizationBarrier 之後立即呼叫此函式是安全的,因為該函式可確保所有線程在釋放前都已完成使用屏障。

如果永遠不會刪除同步處理屏障,執行緒可以在進入屏障時指定 SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 旗標。 所有使用屏障的執行緒都必須指定此旗標;如果沒有任何執行緒,則會忽略 旗標。 此旗標會導致函式略過刪除安全性所需的額外工作,這可改善效能。 請注意,當此旗標生效時刪除屏障可能會導致控制碼存取無效,以及一或多個永久封鎖的執行緒。