P!REL(Pi, Hi)
fsi
Réception de REL(P,H)
Hi <- max(Hi , H) + 1
Nreli <- Nrel – 1
Libération de la ressource R
Di <- fax
DSi <- faux
si (VDi != 0) alors
forall P_j in VD_i Pj!REL(Pi, Hi)
VDi <- 0
fsi
Algorithme de Suzuki et Kasami
Algorithme de Lamport : 3(n-1) messages
Algorithme de Ricard et Agawala : 2(n-1) messages
Algorithme utilisant un jeton
H1 : graphe complet
H2 : identités toutes distincts
H3 : Canaux FIFO ou non
H4 : Tout message émis sera recu correctement au bout d'un temps
Principe de l'algorithme
Soit un système distribué composé de n processus P1, ..., Pn
On affecte un jeton à un processus (Election)
Un processus qui posssède le jeton peut entrer en SC sans envoyer de messages
Un processus qui ne possède pas le jeton il envoie une requête à tous les autres processus, puis
attend le jeton.
Un processus qui possède le jeton et qui recoit une requête d'un autre processus. Deux cas se
présentent :
Cas 1 : Il n'est pas demandeur, donc il relache le jeton à ce demandeur.
Cas 2 : Il est en SC, la requête sera différé
Un processus qui libère la SC il envoie le jeton au prochain demandeur s'il existe, sinon, il le garde
Algorithme de Suzuki et Kazami
Messages utilisés
REQ(P,K) ; Kème demande de la R par P
JETON (P,ESC) : Libération du jeton par P où ESC représente un vecteur de compteur où ESC[i]
est le nombre de fois que Pi est entré en SC.
Variables locales à Pi
Vi : ensemble de processus du réseau
JPi : booléen possède le jeton
Di : vecteur de compteur où Di[j] représente le nombre de fois que Pj demande
ESCi : vecteur de compteur où ESC[j] représente le nombre de fois que Pj a utilisé la ressource
DSi : Booléen en SC
Demande de SC par Pi
Di[i] <- Di[i] + 1
si !JPi alors