Ayuda "Cena de los filosofos"
Publicado por Juan (16 intervenciones) el 16/04/2018 19:27:37
Tengo un problema con este ejercicio , les pongo lo que llevo haciendo pero me sale error.Este es el enunciado:
De igual manera a lo visto en el tema, ahora te proponemos que resuelvas el clásico problema denominado "La cena de los filósofos" utilizando la clase Semaphore del paquete java.util.concurrent.
El problema es el siguiente: cinco filósofos se sientan alrededor de una mesa y pasan su vida comiendo y pensando. Cada filósofo tiene un plato de arroz chino y un palillo a la izquierda de su plato. Cuando un filósofo quiere comer arroz, cogerá los dos palillos de cada lado del plato y comerá. El problema es el siguiente: establecer un ritual (algoritmo) que permita comer a los filósofos. El algoritmo debe satisfacer la exclusión mutua (dos filósofos no pueden emplear el mismo palillo a la vez), además de evitar el interbloqueo y la inanición.
Solucion:
NOTA: el
wait
aquí descrito pone en espera al proceso hasta que los 2 argumentos (semáforos) estén señalizados
De igual manera a lo visto en el tema, ahora te proponemos que resuelvas el clásico problema denominado "La cena de los filósofos" utilizando la clase Semaphore del paquete java.util.concurrent.
El problema es el siguiente: cinco filósofos se sientan alrededor de una mesa y pasan su vida comiendo y pensando. Cada filósofo tiene un plato de arroz chino y un palillo a la izquierda de su plato. Cuando un filósofo quiere comer arroz, cogerá los dos palillos de cada lado del plato y comerá. El problema es el siguiente: establecer un ritual (algoritmo) que permita comer a los filósofos. El algoritmo debe satisfacer la exclusión mutua (dos filósofos no pueden emplear el mismo palillo a la vez), además de evitar el interbloqueo y la inanición.
Solucion:
NOTA: el
wait
aquí descrito pone en espera al proceso hasta que los 2 argumentos (semáforos) estén señalizados
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* Programa cena de los filósofos. Sin interbloqueo */
#define N 5
//N = numero de comensales, palillos, filósofos, etc...
semáforo
palillo[N]={1};
//arreglo de N semáforos que representan los palillos. Todos en
1
void
filosofo (int i)
//proceso de cada filosofo
{
while
(
true
)
//bucle infinito, se puede colocar condición de parada con variable
{
pensar ( );
//tiempo de espera aleatorio de c/filosofo antes de ‘comer’
wait (palillo [i], palillo[i +1] mod 5); //pido los
2 palillos simultáneamente
comer ( );
//tiempo de espera mientras come (puede ser aleatorio)
signal (palillo [i]);
//libero palillo izquierdo
signal (palillo [(i + 1) mod 5]);
//libero palillo derecho
/* El orden en que libero los palillos no es de especial relevancia. */
}
}
void
main
()
{
p
arbegin
(filosofo (0), filosofo (1), filosofo (2), filosofo (3), ..., filosofo (N));
//inicio de los procesos (filósofos)
}
Valora esta pregunta


0