Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit einer Synchronisierungsbarriere können mehrere Threads warten, bis alle Threads einen bestimmten Ausführungspunkt erreicht haben, bevor ein Thread fortgesetzt wird. Synchronisierungsbarrieren können nicht über Prozesse hinweg freigegeben werden.
Synchronisierungsbarrieren sind nützlich für phasenweise Berechnungen, bei denen Threads, die denselben Code parallel ausführen, alle eine Phase abschließen müssen, bevor Sie mit der nächsten fortfahren.
Rufen Sie zum Erstellen einer Synchronisierungsbarriere die InitializeSynchronizationBarrier-Funktion auf, und geben Sie eine maximale Anzahl von Threads an und geben Sie an, wie oft ein Thread gedreht werden soll, bevor er blockiert wird. Starten Sie dann die Threads, die die Barriere verwenden. Nachdem jeder Thread seine Arbeit beendet hat, ruft er EnterSynchronizationBarrier auf, um auf die Barriere zu warten. Die EnterSynchronizationBarrier Funktion blockiert jeden Thread, bis die Anzahl der in der Barriere blockierten Threads die maximale Threadanzahl für die Barriere erreicht, an der EnterSynchronizationBarrier alle Threads entsperrt. Die EnterSynchronizationBarrier--Funktion gibt TRUE- für genau einen der Threads zurück, die in die Barriere eingegeben wurden, und gibt FALSE- für alle anderen Threads zurück.
Rufen Sie DeleteSynchronizationBarrierauf, um eine Synchronisierungsbarriere freizugeben, wenn sie nicht mehr benötigt wird. Es ist sicher, diese Funktion unmittelbar nach dem Aufrufen EnterSynchronizationBarrier aufzurufen, da durch diese Funktion sichergestellt wird, dass alle Threads die Verwendung der Barriere abgeschlossen haben, bevor sie losgelassen wird.
Wenn eine Synchronisierungsbarriere nie gelöscht wird, können Threads das SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE Flag angeben, wenn sie in die Barriere gelangen. Alle Threads, die die Barriere verwenden, müssen diese Kennzeichnung angeben; Wenn kein Thread vorhanden ist, wird das Flag ignoriert. Diese Kennzeichnung bewirkt, dass die Funktion die zusätzliche Arbeit überspringt, die für die Löschsicherheit erforderlich ist, wodurch die Leistung verbessert werden kann. Beachten Sie, dass das Löschen einer Barriere, während dieses Kennzeichen wirksam ist, zu einem ungültigen Handlezugriff und einem oder mehreren dauerhaft blockierten Threads führen kann.