Namensräume
Varianten
Aktionen

std::experimental::barrier

Von cppreference.com
 
 
 
 
 
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) [bearbeiten]
zerstört das barrier-Objekt
(öffentliche Memberfunktion) [bearbeiten]
operator=
[gelöscht]
nicht kopierbar
(öffentliche Memberfunktion) [bearbeiten]
kommt am Synchronisationspunkt an und blockiert
(öffentliche Memberfunktion) [bearbeiten]
kommt am Synchronisationspunkt an und entfernt den aktuellen Thread aus der Menge der teilnehmenden Threads
(öffentliche Memberfunktion) [bearbeiten]