Barrière de synchronisation

Un article de Wikipédia, l'encyclopédie libre.

Une barrière de synchronisation permet de garantir qu'un certain nombre de tâches ait passé un point spécifique. Ainsi, chaque tâche qui arrivera sur cette barrière devra attendre jusqu'à ce que le nombre spécifié de tâches soient arrivées à cette barrière.

[modifier] Algorithme

Pour réaliser une barrière de synchronisation, il faut disposer de deux sémaphores et d'une variable :

  • Un sémaphore MUTEX (initialisé à 1) protégeant la variable.
  • Un sémaphore ATTENTE (initialisé à 0) permettant de mettre en attente les tâches.
  • Une variable Nb_Att (initialisée à 0) permettant de compter le nombre de tâches déjà arrivées à la barrière de synchronisation.

Il faut encore définir la constante N qui indique le nombre de tâches devant arriver à la barrière avant de l'ouvrir.

Barriere :
   P(MUTEX)
   Nb_Att++
   SI Nb_Att==N ALORS
      POUR I DE 1 à N-1 FAIRE
         V(ATTENTE)
      FIN POUR
      Nb_Att=0
      V(MUTEX)
   SINON
      V(MUTEX)
      P(ATTENTE)
   FIN SI

[modifier] Exemple d'utilisation

Les barrières de synchronisation peuvent être utilisées pour

  • Garantir qu'une ou plusieurs tâches ont effectués une opération particulière.
  • Attendre la fin d'un ensemble de tâches

[modifier] Voir aussi

Problèmes classiques des
méthodes de synchronisation

Couplage fort - Famine

Interblocage - Inversion de priorité

Les méthodes de synchronisation

Barrière de synchronisation - Futex - Moniteur

Mutex - Sémaphore - Spinlock

Autres langues