Namespaces
Variants

std::experimental:: flex_barrier

From cppreference.net
Definiert in Header <experimental/barrier>
class flex_barrier ;
(Concurrency TS)

Die Klasse std::experimental::flex_barrier bietet einen Thread-Koordinationsmechanismus, der es einer Gruppe teilnehmender Threads ermöglicht, zu blockieren, bis ein Vorgang abgeschlossen ist. Im Gegensatz zu std::experimental::latch sind Barrieren wiederverwendbar; sobald die teilnehmenden Threads vom Synchronisationspunkt einer Barriere freigegeben werden, können sie dieselbe Barriere erneut verwenden.

Eine Barriere hat eine Abschlussphase, die von einem der teilnehmenden Threads ausgeführt wird, sobald alle Threads in der Gruppe der teilnehmenden Threads den Synchronisationspunkt erreicht haben. Die arrive_and_wait und arrive_and_drop Aufrufe synchronisieren mit dem Beginn der Abschlussphase; das Ende der Abschlussphase synchronisiert mit den Rückgaben aller durch ihren Abschluss blockierten Aufrufe.

std::experimental::flex_barrier ermöglicht es dem Benutzer, die Abschlussphase mit einem Funktionsobjekt zu steuern. Wenn das Funktionsobjekt -1 zurückgibt, bleibt der Satz teilnehmender Threads unverändert (und derselbe Satz teilnehmender Threads muss im nächsten Zyklus am Synchronisationspunkt eintreffen); andernfalls wird der Satz teilnehmender Threads zu einem neuen Satz mit einer Größe gleich dem Rückgabewert N , und besteht aus den nächsten N Threads, die am Synchronisationspunkt der Barriere eintreffen.

Benutzer, die diese Funktionalität nicht benötigen, können std::experimental::barrier verwenden.

Memberfunktionen

konstruiert eine flex_barrier
(öffentliche Elementfunktion)
zerstört die flex_barrier
(öffentliche Elementfunktion)
operator=
[deleted]
nicht kopierzuweisbar
(öffentliche Elementfunktion)
erreicht den Synchronisationspunkt und blockiert
(öffentliche Elementfunktion)
erreicht den Synchronisationspunkt und entfernt den aktuellen Thread aus dem Satz teilnehmender Threads
(öffentliche Elementfunktion)