#algorithmes #fr #distributedalgorithms #sorbonne #mutex
L'algorithme de Naimi-Trehel
On a deux estructures de données:
- File de requêtes (
next)- Le processus en tête de la file possède le jeton
- Le processus à la fin de la file est le dernier processus qui a fait une requête pour entrer en section critique
- Une nouvelle requête est toujours placée en fin de la file
- Arbre de chemins vers le dernier demandeur (
father)- Le dernier demandeur est la racine de l'arbre
- Une nouvelle requête est transmise à travers un chemin de pointeurs
fatherjusqu'à la racine de l'arbre (father== nil)- Reconfiguration dynamique de l'arbre. Le nouveau demandeur devient la nouvelle racine de l'arbre
- Les sites dans le chemin compris entre la nouvelle et l'ancienne racine changent leur pointeur
fathervers la nouvelle racine
L'algorithme
variables locales
token
requesting
next
father
initialisation de S_i
father = S_1;
next = nil;
requesting = false;
token = (father == S_i);
if father == S_i
father = nil;
Request_CS(S_i)
requesting = true;
if father != nil
send(REQUEST, S_i) à father;
father = nil;
/* attendre token == true */
Release_CS(S_i)
requesting = true;
if next != nil
send(token) à next;
token = false;
next = nil;
Receive_request_CS(S_j)
if father == nil;
if requesting
next = S_j;
else
token = false;
send(token) à S_j;
else
send(REQUEST, S_j) à father;
father = S_j
Receive_token(S_j)
token = true
Evaluation
- Entre 0 et N messages par demande de section critique
- moyenne de O(log(N)) messages par exécution de section critique
- avantages.
- extensibilité
- adaptativité. un site qui n'est pas intéressé par la section critique ne sera plus sollicité après quelques transferts de requêtes.