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_ONLY 或 SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY來覆寫屏障的默認行為。 不過,請記住,使用這些旗標可能會影響效能。 無限期地讓處理器無法維護其他線程,而提前封鎖會造成將線程交換掉處理器的額外負荷、解除封鎖時喚醒線程,並將它再次交換回處理器。 一般而言,最好允許阻礙管理線程,而且只有在效能測試指出應用程式受益於這些旗標時,才會使用這些旗標。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | synchapi.h |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |