Buenas, qué tal?
En el teórico de semáforos se plantean 3 alternativas para solucionar el problema del deadlock de los Filósofos que cenan:
- Solo permitir comer a 4 a la vez (solución en el teórico).
- Tener un administrador que solo permita tomar los dos tenedores juntos o ninguno.
- Numerar los tenedores y que solo se puedan tomar en orden ascendente (o descendente).
INIT(T[i], 1);Solución usando 3:
INIT(mutex_admin, 1);
procedure filosofo_i()
repeat
P(mutex_admin);
P(T[i]);
P(T[i+1 mod 5]);
V(mutex_admin);
comer();
V(T[i]);
V(T[i+1 mod 5]);
pensar();
until False
end procedure
INIT(T[i], 1);
procedure filosofo_i()
l = min(i, i+1 mod 5);
r = max(i, i+1 mod 5);
repeat
P(T[l]);
P(T[r]);
comer();
V(T[r]);
V(T[l]);
pensar();
until False
end procedure