Algorithme de Ricart et Agrawala
LâAlgorithme Ricart-Agrawala est un algorithme d'exclusion mutuelle sur un systĂšme distribuĂ©. Cet algorithme est une extension et une optimisation de l'algorithme de Lamport, en supprimant la nĂ©cessitĂ© de communiquer un message de libĂ©ration. Il a Ă©tĂ© dĂ©veloppĂ© par Glenn Ricart et Ashok Agrawala. Dans cet algorithme, les requĂȘtes d'entrĂ©e sont totalement ordonnĂ©es grĂące Ă l'utilisation de l'Horloge de Lamport.
Algorithme
Il a pour but de diminuer le nombre de messages échangés par entrée en section critique et élimine les messages de type libération.
Deux types de message sont utilisés ici[1]:
- les messages REQUETE qui sont envoyés lorsqu'un site veut entrer en section critique
- les messages REPONSE qui sont envoyés soit immédiatement à la réception d'un message de type REQUETE, soit ultérieurement à la sortie de section critique du site.
Source
/* invariant : Pi :EC==exclusion )8p; Pp:EC==candidat: Pi :drLoc < Pp:drLoc */
process P(i:0..N-1){
type Ătat = {hors,candidat,exclusion};
EtatEC = hors;
Datehloc = newDate(i,1);
DatedrLoc;
Set<int>Att=newEnumSet<int>();Set<int>D=EnumSet.range(0,N-1).remove(i);
while (true) {
select {
when (EC == hors)) // hors -> candidat
EC = candidat; drLoc=hloc.Top() ;
for(intp:D) send Rq(i,drLoc) to Pp ;
[]when (EC == exclusion)) // exclusion ! hors
for(intp:Att) send Perm(i) to Pp ; Att.clear() ; EC=hors;
[]when (EC == candidat) ) receive Perm(p) // candidat ? -> exclusion
D.remove(p);
if(D.empty())
EC = exclusion;
[]receive Rq(p,dr);
hloc.Recaler(dr) ;
if(EC!=hors&& Date.pred(drloc,dr))Att.add(p);
elsesend Perm(i) to Pp ;
} // select
} // while
}
Lorsqu'un processus (ou un site) Pi dĂ©sire entrer en section critique, il envoie un message du type Requete. Lorsqu'un processus Pj reçoit ce message, soit il accepte et renvoie un message de type Response, ou diffĂ©rer sa rĂ©ponse. Sâil ne dĂ©sire pas entrer en section critique, il envoie un message Response.
Un processus entre en section critique seulement s'il a obtenu les permissions de tous les autres (Ă l'aide des requĂȘtes Response).
Performance
- le nombre total de messages est , N Ă©tant le nombre de sites que comprend ce systĂšme.
- Un seul message suffit pour la synchronisation.
Variantes de l'algorithme
L'algorithme Carvalho et Roucairol : l'accord donnĂ© par un processus reste valable tant qu'il n'a pas fait lui-mĂȘme une demande d'entrĂ©e en section critique.
Notes et références
- Jean-Marie Rifflet, Algorithme de Ricart/Agrawala
Bibliographie
- Jean-Marie Rifflet, « Exclusion mutuelle : algorithme de Ricart/Agrawala »,
- François Laroussinie, « Algorithme de Ricart-Agrawala (1981) »
- Sarah Benkouider, Souhila Labgaa, Mohamed Yagoubi, « Influence De La Taille Du Jeton Sur Les Performances De Lâalgorithme D'exclusion Mutuelle De Ricart - Agrawala »