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 |