std::experimental::flex_barrier::arrive_and_wait
| 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) |