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âches qui arrivera sur cette barrière devra attendre jusqu'à ce que le nombre spécifiée de tâches soient arrivées à cette barrière.
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 compte 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