9. Barrières
Une barrière synchronise un groupe à la frontière entre deux phases :
- chaque thread termine sa tâche A;
- il appelle
pthread_barrier_wait; - les premiers arrivés bloquent;
- lorsque le nombre configuré est atteint, tous sont libérés;
- les tâches B peuvent commencer.
pthread_barrier_init fixe un compte strictement positif. À la libération, un thread reçoit PTHREAD_BARRIER_SERIAL_THREAD et les autres reçoivent zéro; la barrière redevient réutilisable. pthread_barrier_destroy ne doit pas être appelé pendant qu’un thread attend.
Une barrière impose un rendez-vous collectif, mais ne protège pas automatiquement les données partagées à l’intérieur d’une phase. Elle répond donc à un besoin différent d’un mutex ou d’un sémaphore.