Share via


EnterSynchronizationBarrier-Funktion (synchapi.h)

Bewirkt, dass der aufrufende Thread an einer Synchronisierungsbarriere wartet, bis die maximale Anzahl von Threads die Barriere betreten hat.

Syntax

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

Parameter

[in, out] lpBarrier

Ein Zeiger auf eine initialisierte Synchronisierungsbarriere. Verwenden Sie die InitializeSynchronizationBarrier-Funktion , um die Barriere zu initialisieren. SYNCHRONIZATION_BARRIER ist eine undurchsichtige Struktur, die von der Anwendung nicht geändert werden sollte.

[in] dwFlags

Flags, die das Verhalten von Threads steuern, die diese Barriere betreten. Bei diesem Parameter kann es sich um einen oder mehrere der folgenden Werte handeln:

Wert Bedeutung
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY Gibt an, dass der Thread, der in die Barriere eintritt, sofort blockiert werden soll, bis der letzte Thread in die Barriere eintritt. Weitere Informationen finden Sie in den Hinweisen.
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY Gibt an, dass der Thread, der in die Barriere eintritt, sich drehen soll, bis der letzte Thread in die Barriere eintritt, auch wenn der spinnende Thread die maximale Spinanzahl der Barriere überschreitet. Weitere Informationen finden Sie in den Hinweisen.
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE Gibt an, dass die Funktion die erforderliche Arbeit überspringen kann, um sicherzustellen, dass die Barriere sicher gelöscht werden kann, wodurch die Leistung verbessert werden kann. Alle Threads, die diese Barriere betreten, müssen das Flag angeben. Andernfalls wird das Flag ignoriert. Dieses Flag sollte nur verwendet werden, wenn die Barriere nie gelöscht wird.

Rückgabewert

TRUE für den letzten Thread, der die Barriere signalisiert. Threads, die die Barriere signalisieren, bevor der letzte Thread signalisiert, erhalten den Rückgabewert .FALSE

Hinweise

Das Standardverhalten für Threads, die in eine Synchronisierungsbarriere eintreten, besteht darin, sich zu drehen, bis die maximale Spinanzahl der Barriere erreicht ist, und dann zu blockieren. Dadurch können Threads schnell fortgesetzt werden, wenn der letzte Thread in relativ kurzer Zeit in die Barriere eintritt. Wenn es jedoch relativ länger dauert, bis der letzte Thread eintrifft, werden Threads, die sich bereits im Sperrblock befinden, damit sie während des Wartens keine Prozessorzeit mehr benötigen.

Ein Thread kann das Standardverhalten der Barriere überschreiben, indem SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY oder SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY angegeben wird. Beachten Sie jedoch, dass sich die Verwendung dieser Flags auf die Leistung auswirken kann. Durch das unendliche Drehen wird verhindert, dass ein Prozessor andere Threads bedient, während eine vorzeitige Blockierung den Mehraufwand für den Austausch des Threads vom Prozessor verursacht, den Thread beim Aufheben der Blockierung aufweckt und wieder auf den Prozessor umtauscht. Im Allgemeinen ist es besser, der Barriere die Verwaltung von Threads und die Verwendung dieser Flags nur zu erlauben, wenn Leistungstests darauf hindeuten, dass die Anwendung davon profitieren würde.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile synchapi.h
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

DeleteSynchronizationBarrier

InitializeSynchronizationBarrier

Synchronisierungsbarrieren

In VBS-Enclaves verfügbare Vertdll-APIs