std::experimental:: flex_barrier
|
Definiert in Header
<experimental/barrier>
|
||
|
class
flex_barrier
;
|
(Concurrency TS) | |
Die Klasse
std::experimental::flex_barrier
bietet einen Thread-Koordinationsmechanismus, der es einer Gruppe teilnehmender Threads ermöglicht, zu blockieren, bis ein Vorgang abgeschlossen ist. Im Gegensatz zu
std::experimental::latch
sind Barrieren wiederverwendbar; sobald die teilnehmenden Threads vom Synchronisationspunkt einer Barriere freigegeben werden, können sie dieselbe Barriere erneut verwenden.
Eine Barriere hat eine Abschlussphase, die von einem der teilnehmenden Threads ausgeführt wird, sobald alle Threads in der Gruppe der teilnehmenden Threads den Synchronisationspunkt erreicht haben. Die
arrive_and_wait
und
arrive_and_drop
Aufrufe
synchronisieren mit
dem Beginn der Abschlussphase; das Ende der Abschlussphase synchronisiert mit den Rückgaben aller durch ihren Abschluss blockierten Aufrufe.
std::experimental::flex_barrier
ermöglicht es dem Benutzer, die Abschlussphase mit einem Funktionsobjekt zu steuern. Wenn das Funktionsobjekt -1 zurückgibt, bleibt der Satz teilnehmender Threads unverändert (und derselbe Satz teilnehmender Threads muss im nächsten Zyklus am Synchronisationspunkt eintreffen); andernfalls wird der Satz teilnehmender Threads zu einem neuen Satz mit einer Größe gleich dem Rückgabewert
N
, und besteht aus den nächsten
N
Threads, die am Synchronisationspunkt der Barriere eintreffen.
Benutzer, die diese Funktionalität nicht benötigen, können std::experimental::barrier verwenden.
Memberfunktionen
konstruiert eine
flex_barrier
(öffentliche Elementfunktion) |
|
zerstört die
flex_barrier
(öffentliche Elementfunktion) |
|
|
operator=
[deleted]
|
nicht kopierzuweisbar
(öffentliche Elementfunktion) |
|
erreicht den Synchronisationspunkt und blockiert
(öffentliche Elementfunktion) |
|
|
erreicht den Synchronisationspunkt und entfernt den aktuellen Thread aus dem Satz teilnehmender Threads
(öffentliche Elementfunktion) |