Java - Ayuda "Cena de los filosofos"

 
Vista:
sin imagen de perfil
Val: 23
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

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
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 15
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda "Cena de los filosofos"

Publicado por Eugenio (6 intervenciones) el 17/04/2018 13:02:00
La solución a este ejercicio es que los filósofos cogen un palillo y luego el otro, es decir, primero cogen el izquierdo y luego el derecho. Esto tiene un problema que todos los filósofos cogen el izquierdo y se quedan toda la vida esperando a que alguien suelte el palillo. Para solucionar esto uno de los filósofos debe coger los palillos en orden inverso, es decir, primero el derecho y luego el izquierdo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 23
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda "Cena de los filosofos"

Publicado por Juan (16 intervenciones) el 17/04/2018 14:44:23
Hola amigo , pero es un ejercicio en NetBeans , no es usar la lógica para solucionar el ejercicio... por eso pasé mi código por si alguien me puede ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda "Cena de los filosofos"

Publicado por Eugenio (6 intervenciones) el 17/04/2018 17:33:18
Lo siento pero no te puedo resolver los problemas de clase, solo te he dicho que si todos los filósofos cogen en el mismo orden los palillos todos cogerán su primer palillo y todos esperaran a que alguien suelte el suyo.

Tampoco me has dicho cual es el error exacto te sale, no soy adivino.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar