std::experimental::flex_barrier
| 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) | |
zerstört das flex_barrier(public member function) | |
| operator= [gelöscht] |
nicht kopierbar (public member function) |
| kommt am Synchronisationspunkt an und blockiert (public member function) | |
| kommt am Synchronisationspunkt an und entfernt den aktuellen Thread aus der Menge der teilnehmenden Threads (public member function) |