std::experimental::barrier
| Definiert im Header <experimental/barrier> |
||
| class barrier; |
(Concurrency TS) | |
Die Klasse std::experimental::barrier bietet einen Mechanismus zur Thread-Koordination, 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 von 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 ankommen. 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.
Für std::experimental::barrier ist die Abschlussphase leer. std::experimental::flex_barrier ermöglicht es dem Benutzer, die Abschlussphase mit einem Funktionsobjekt zu steuern.
Die Gruppe teilnehmender Threads für ein für num_threads Threads konstruiertes barrier ist die erste Gruppe von num_threads Threads, die nach der Konstruktion an seinem Synchronisationspunkt ankommen. Dieselbe Gruppe von Threads (mit Ausnahme von Threads, die arrive_and_drop() aufgerufen haben) muss in jedem Zyklus am barrier ankommen.
[bearbeiten] Memberfunktionen
konstruiert ein barrier(öffentliche Memberfunktion) | |
| zerstört das barrier-Objekt (öffentliche Memberfunktion) | |
| operator= [gelöscht] |
nicht kopierbar (öffentliche Memberfunktion) |
| kommt am Synchronisationspunkt an und blockiert (öffentliche Memberfunktion) | |
| kommt am Synchronisationspunkt an und entfernt den aktuellen Thread aus der Menge der teilnehmenden Threads (öffentliche Memberfunktion) |