Namensräume
Varianten
Aktionen

std::experimental::flex_barrier::arrive_and_wait

Von cppreference.com
 
 
 
 
 
void arrive_and_wait();
(Concurrency TS)

Blockiert und erreicht den Synchronisationspunkt des flex_barrier.

Das Verhalten ist undefiniert, wenn der aufrufende Thread nicht zur Menge der teilnehmenden Threads dieses flex_barrier gehört.

Aufrufe von arrive_and_wait synchronisieren mit dem Beginn der Abschlussphase des flex_barrier. Der Abschluss der Abschlussphase synchronisiert mit der Rückgabe des Aufrufs.

Aufrufe von arrive_and_drop und arrive_and_wait führen niemals zu Datenrennen mit sich selbst oder untereinander.

[bearbeiten] Hinweise

Es ist sicher für einen Thread, entweder arrive_and_wait() oder arrive_and_drop() unmittelbar nach der Rückkehr von diesem Aufruf zu tätigen (vorausgesetzt, das Funktionsobjekt für die Abschlussphase gab nicht Null zurück). Es ist nicht notwendig sicherzustellen, dass alle blockierten Threads arrive_and_wait() verlassen haben, bevor ein Thread es erneut aufruft.

Die Abschlussphase führt das Funktionsobjekt aus, das beim Erstellen des flex_barrier angegeben wurde. Wenn es -1 zurückgibt, bleibt die Menge der teilnehmenden Threads unverändert; andernfalls ist die Menge der teilnehmenden Threads eine neue Menge mit der Größe, die dem Rückgabewert N entspricht, und besteht aus den nächsten N Threads, die am Synchronisationspunkt eintreffen. Wenn N == 0, kann der flex_barrier nur zerstört werden.

Die anfängliche Menge der teilnehmenden Threads für einen flex_barrier, der für num_threads Threads erstellt wurde, sind die ersten num_threads, die seinen Synchronisationspunkt erreichen.

[bearbeiten] Ausnahmen

Wirft nichts.

[bearbeiten] Siehe auch

kommt am Synchronisationspunkt an und entfernt den aktuellen Thread aus der Menge der teilnehmenden Threads
(public member function) [bearbeiten]