EnterSynchronizationBarrier 函式 (synchapi.h)

導致呼叫線程在同步處理屏障等候,直到線程數目上限進入屏障為止。

語法

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

參數

[in, out] lpBarrier

初始化同步處理屏障的指標。 使用 InitializeSynchronizationBarrier 函式來初始化屏障。 SYNCHRONIZATION_BARRIER 是應用程式不應修改的不透明結構。

[in] dwFlags

旗標,控制進入此屏障的線程行為。 此參數可以是下列一或多個值:

意義
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 指定進入屏障的線程應該會立即封鎖,直到最後一個線程進入屏障為止。 如需詳細資訊,請參閱<備註>。
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 指定進入屏障的線程應該微調到最後一個線程進入屏障為止,即使旋轉線程超過屏障的最大微調計數也一樣。 如需詳細資訊,請參閱<備註>。
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 指定函式可以略過所需的工作,以確保刪除屏障是安全的,這可以改善效能。 所有進入此屏障的線程都必須指定 旗標;否則,會忽略旗標。 只有在永遠不會刪除屏障時,才應該使用此旗標。

傳回值

TRUE 表示最後一個線程發出屏障訊號。 在最後一個線程之前發出屏障訊號的線程會發出其接收傳 FALSE回值的訊號。

備註

進入同步處理屏障的線程預設行為是微調,直到達到屏障的最大微調計數,然後封鎖為止。 這可讓線程在最後一個線程在相對短時間內進入屏障時快速繼續。 不過,如果最後一個線程需要相對較長的時間才能抵達,則已進入屏障區塊中的線程,讓線程在等候時停止耗用處理器時間。

線程可以藉由指定 SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLYSYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY來覆寫屏障的默認行為。 不過,請記住,使用這些旗標可能會影響效能。 無限期地讓處理器無法維護其他線程,而提前封鎖會造成將線程交換掉處理器的額外負荷、解除封鎖時喚醒線程,並將它再次交換回處理器。 一般而言,最好允許阻礙管理線程,而且只有在效能測試指出應用程式受益於這些旗標時,才會使用這些旗標。

規格需求

需求
最低支援的用戶端 Windows 8 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2012 [僅限傳統型應用程式]
目標平台 Windows
標頭 synchapi.h
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

DeleteSynchronizationBarrier

InitializeSynchronizationBarrier

同步處理屏障

VBS 記憶體保護區中可用的 Vertdll API