Concept

Barrière de synchronisation

En programmation concurrente, une barrière de synchronisation permet de garantir qu'un certain nombre de tâches aient 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. Pour réaliser ce premier algorithme de 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 Ce premier algorithme est correct mais il n'implémente pas une barrière cyclique. Si les tâches doivent se synchroniser plusieurs fois avec une barrière il est alors nécessaire d'utiliser 2 barrières différentes de manière alternative. Le scénario suivant met en évidence, à l'aide d'un contre exemple, que la même barrière ne peut pas être immédiatement réutilisée : Un processus A parmi les N-1 premiers est mis en pause (par un mécanisme préemptif) entre le V(MUTEX) et le P(ATTENTE) et ne reprendra pas la main avant un certain temps. Tous les processus arrivent au niveau de la barrière. Lorsque le dernier processus arrive, le sémaphore ATTENTE vaut alors -(N-2) (car A n'a pas effectué son opération P(ATTENTE)). Le dernier processus arrivé effectue N-1 fois V(ATTENTE) et libère le mutex. Le sémaphore ATTENTE vaut alors 1. Un processus B s'exécute rapidement et arrive à la deuxième barrière de synchronisation. B exécute le code de la barrière, et effectue un P(ATTENTE). Cette opération n'est pas bloquante car le sémaphore ATTENTE vaut 1 (le processus A n'a toujours pas effectué le P(ATTENTE) de la première barrière).

À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.

Graph Chatbot

Chattez avec Graph Search

Posez n’importe quelle question sur les cours, conférences, exercices, recherches, actualités, etc. de l’EPFL ou essayez les exemples de questions ci-dessous.

AVERTISSEMENT : Le chatbot Graph n'est pas programmé pour fournir des réponses explicites ou catégoriques à vos questions. Il transforme plutôt vos questions en demandes API qui sont distribuées aux différents services informatiques officiellement administrés par l'EPFL. Son but est uniquement de collecter et de recommander des références pertinentes à des contenus que vous pouvez explorer pour vous aider à répondre à vos questions.