L'algorithme de Banker est utilisé pour déterminer si toutes les demandes de ressources peuvent être satisfaites sans conduire à une impasse.
m est le nombre total de types de ressources
n est le nombre total de processus
NEED est un tableau de taille m * n, qui définit les demandes en attente pour chaque type de ressources. Par exemple : NEEDij = 2 signifie que le processus i demande 2 éléments de la ressource j.
L'algorithme est présenté ci-dessous :
BOOLEAN function SAFESTATE is -- Determines if current state is safe
{ NOCHANGE : boolean;
WORK : array[1..m] of INTEGER = AVAILABLE;
FINISH : array[1..n] of boolean = [false, ..,false];
I : integer;
repeat
NOCHANGE = TRUE;
for I = 1 to N do
if ((not FINISH[i]) and
NEEDi <= WORK) then {
WORK = WORK + ALLOCATION_i;
FINISH[i] = true;
NOCHANGE = false;
}
until NOCHANGE;
return (FINISH == (true, .., true));
}
Ma question est la suivante : comment la complexité temporelle est-elle égale à 0(n * n * m) ? Plus précisément, comment le terme m entre-t-il dans le polynôme ? Est-ce parce que nous devons faire une comparaison élément par élément sur un vecteur de longueur m ?