Namensräume
Varianten
Aktionen

std::experimental::flex_barrier

Von cppreference.com
 
 
 
 
 
Definiert im Header <experimental/barrier>
class flex_barrier;
(Concurrency TS)

Die Klasse std::experimental::flex_barrier stellt einen Mechanismus zur Thread-Koordination bereit, der es einer Gruppe teilnehmender Threads ermöglicht, zu blockieren, bis eine Operation abgeschlossen ist. Im Gegensatz zu std::experimental::latch sind Barrier-Objekte wiederverwendbar; sobald die teilnehmenden Threads aus einem Synchronisationspunkt eines Barrier-Objekts freigegeben werden, können sie dasselbe Barrier-Objekt wiederverwenden.

Ein Barrier-Objekt hat eine Abschlussphase, die von einem der teilnehmenden Threads ausgeführt wird, sobald alle Threads in der Gruppe der teilnehmenden Threads am Synchronisationspunkt eintreffen. Die Aufrufe arrive_and_wait und arrive_and_drop synchronisieren mit dem Beginn der Abschlussphase; das Ende der Abschlussphase synchronisiert mit den Rückgaben aller Aufrufe, die durch ihre Abschlussphase blockiert werden.

std::experimental::flex_barrier ermöglicht es dem Benutzer, die Abschlussphase mit einem Funktions-Objekt zu steuern. Wenn das Funktions-Objekt -1 zurückgibt, bleibt die Gruppe der teilnehmenden Threads unverändert (und dieselbe Gruppe von teilnehmenden Threads muss im nächsten Zyklus am Synchronisationspunkt eintreffen); andernfalls wird die Gruppe der teilnehmenden Threads zu einer neuen Gruppe mit einer Größe, die gleich dem zurückgegebenen Wert N ist, und besteht aus den nächsten N Threads, die am Synchronisationspunkt des Barrier-Objekts eintreffen.

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

[bearbeiten] Member-Funktionen

konstruiert ein flex_barrier
(public member function) [bearbeiten]
zerstört das flex_barrier
(public member function) [bearbeiten]
operator=
[gelöscht]
nicht kopierbar
(public member function) [bearbeiten]
kommt am Synchronisationspunkt an und blockiert
(public member function) [bearbeiten]
kommt am Synchronisationspunkt an und entfernt den aktuellen Thread aus der Menge der teilnehmenden Threads
(public member function) [bearbeiten]