[Semáforos] Alternativas de solución a Filósofos comensales

[Semáforos] Alternativas de solución a Filósofos comensales

de Alejandro Gabriel Clara Mariño -
Número de respuestas: 2

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:

  1. Solo permitir comer a 4 a la vez (solución en el teórico).
  2. Tener un administrador que solo permita tomar los dos tenedores juntos o ninguno.
  3. Numerar los tenedores y que solo se puedan tomar en orden ascendente (o descendente).
La duda es si las siguientes soluciones usando (o intentando usar) 2 y 3, son válidas:

Solución usando 2:
INIT(T[i], 1);
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
Solución usando 3:
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

Gracias, desde ya. Saludos.
En respuesta a Alejandro Gabriel Clara Mariño

Re: [Semáforos] Alternativas de solución a Filósofos comensales

de Manuel Freire -

Si, las dos soluciones son correctas. El único tema (que está mejor explicado en este hilo) sería en tu solución de pedir los dos a la vez (b). Por como lo hiciste, impidiendo que ningún filósofo pueda acceder a un tenedor cuando otro está pidiendo en casos con números muy altos de tenedores y filósofos esa solución tendría un gran cuello de botella en el pedido. Al ser pocas funciones (ps y vs) no se notaría si no son números gigantes pero es algo para que tengas en cuenta.

Disculpá la demora espero que te sirva para el parcial y cualquier duda repreguntá

Saludos!