Le principe consiste à détecter, à intervalles réguliers, les attentes circulaires, puis de permettre la reprise par une action curative.
debut
tant que vrai faire debut
trouverAttenteCirculaire;
traiterCycle;
attendre delaiPeriode;
fin
fin
traiterCycle utilise généralement une des deux méthodes suivantes :
Soit un système et son graphe d'allocation des ressources,
trouverAttenteCirculaire est facilement implémentable :
debut
tant qu'il existe un sommet sans prédécesseur faire debut
enlever les arcs sortants de ce sommet;
enlever le sommet;
fin
attenteCirculaire = non (graphe résultant est vide)
fin
Il existe des ressources non distinguables (ex : un bloc du disque libre) pour le problème de l'interblocage. Dans ce cas, le graphe des allocations est complexe, et une représentation matricielle est plus aisée et plus efficace.
Un système est composé de
processus et de
types de ressources. Le problème de l'interblocage est décrit par : un vecteur
des ressources existantes, une matrice
des ressources tenues, et une matrice
des requêtes.
On note
trouverAttenteCirculaire(E,T,R) peut alors s'écrire :
debut
![]()
;
tant qu'il existe un processus
tel que
faire debut
![]()
;
![]()
;
fin
attenteCirculaire = ![]()
;
fin
représente les ressources disponibles. L'idée intuitive est donc : si le système satisfait la requête
, alors
peut terminer son exécution, et rendre ainsi les ressources
qu'il détient.
Soit un système composé de 3 processus et de 4 types de ressources.
,
,
.
L'algorithme trouverAttenteCirculaire(E,T,R) donne :
Pour
.
L'algorithme trouverAttenteCirculaire(E,T,R) donne :
Pour
.
L'algorithme trouverAttenteCirculaire(E,T,R) donne :
trouverAttenteCirculaire utilise soit un graphe, soit des matrices. Cette information peut être obtenue de deux façons :