std::experimental:: flex_barrier
|
Défini dans l'en-tête
<experimental/barrier>
|
||
|
class
flex_barrier
;
|
(concurrency TS) | |
La classe
std::experimental::flex_barrier
fournit un mécanisme de coordination de threads qui permet à un ensemble de threads participants de se bloquer jusqu'à ce qu'une opération soit terminée. Contrairement au
std::experimental::latch
, les barrières sont réutilisables ; une fois que les threads participants sont libérés du point de synchronisation d'une barrière, ils peuvent réutiliser la même barrière.
Une barrière possède une phase de complétion, qui est exécutée par l'un des threads participants une fois que tous les threads de l'ensemble des threads participants atteignent le point de synchronisation. Les appels
arrive_and_wait
et
arrive_and_drop
se synchronisent avec
le début de la phase de complétion ; la fin de la phase de complétion se synchronise avec les retours de tous les appels bloqués par son achèvement.
std::experimental::flex_barrier
permet à l'utilisateur de contrôler la phase de complétion avec un objet fonction. Si l'objet fonction retourne -1, l'ensemble des threads participants reste inchangé (et le même ensemble de threads participants doit atteindre le point de synchronisation dans le cycle suivant) ; sinon l'ensemble des threads participants devient un nouvel ensemble avec une taille égale à la valeur retournée
N
, et consiste en les
N
threads suivants qui atteindront le point de synchronisation de la barrière.
Les utilisateurs qui n'ont pas besoin de cette fonctionnalité peuvent utiliser std::experimental::barrier .
Fonctions membres
construit un
flex_barrier
(fonction membre publique) |
|
détruit le
flex_barrier
(fonction membre publique) |
|
|
operator=
[deleted]
|
non assignable par copie
(fonction membre publique) |
|
arrive au point de synchronisation et se bloque
(fonction membre publique) |
|
|
arrive au point de synchronisation et retire le thread courant de l'ensemble des threads participants
(fonction membre publique) |