¿Por qué cinco filósofos gastronómicos?


18

Me preguntaba por qué el problema de los filósofos de comedor se basa en un caso de cinco filósofos. ¿Por qué no cuatro?

Supongo que podemos observar todos los problemas desagradables que pueden ocurrir al discutir el ejemplo de cinco filósofos también cuando se nos dan cuatro pensadores. ¿Es solo por una razón histórica entonces?


1
El problema original fue descrito por Dijkstra en 1965 y llamado Quintuple Comedor (que se encuentra en las notas en la parte superior de la página 3).

Me parece recordar haber aprendido sobre cuatro filósofos gastronómicos ...
Michael Borgwardt

16
Son 5 filósofos porque estaba tratando de ver si alguien alguna vez notaría lo obvio; Cinco filósofos juntos hablarán hasta que el restaurante los eche, ni siquiera recogerán sus cubiertos. 4 podrían tener una pausa en la conversación el tiempo suficiente para que comiencen a comer. Con 5 tan pronto como dos dejen de hablar por un momento, ya hay uno en la cola esperando para interponerse para garantizar la continuidad.
Jimmy Hoffa

1
@Jimmy Hoffa - + 1. ¿Y por qué no responde eso?
SChepurin

Respuestas:


17

Según lo escrito en EWD310 "Ordenación jerárquica de procesos secuenciales" , parece que el número 5 ha sido elegido con fines educativos, con el fin de facilitar a los estudiantes la comprensión del algoritmo diseñado para demostrar la solución del problema.

Este mismo documento respalda aún más la idea de que 5 no es realmente relevante para un problema general, primero declarando explícitamente que "el problema podría haber sido planteado por 9 o 25 filósofos ..." y luego, representándolo en términos de dos que operan simultáneamente entidades, "clase A y clase B, que comparten el mismo recurso ..."

La solución utilizada por Dijkstra introduce tres "estados de filósofo": pensar, comer, tener hambre. El código presentado para resolver el problema opera estos tres estados, junto con un número no relacionado de filósofos.

Si el autor hubiera elegido el número de filósofos 2, 3 o 4, esto podría causar confusión en los estudiantes que leen el código, ya sea que el número elegido esté relacionado con la cantidad de estados u otra cosa. Esto se puede comprobar fácilmente tratando los números mencionados en la descripción citados de EWD310 a continuación: nota, por ejemplo, cómo esto cambiaría [0:4]a [0:3], [0:2], [0:1]y las declaraciones que implica mod.

A diferencia de esto, el número 5 parece bastante inocente y no invoca asociaciones innecesarias. Se puede decir que ha sido elegido para ilustrar mejor esa cantidad de filósofos es, bueno, arbitrario .


El algoritmo mencionado se presenta en EWD310 de la siguiente manera:

... asociamos con cada filósofo una variable de estado, "C", por ejemplo, donde

C[i] = 0significa: filósofo iestá pensando

C[i] = 2significa: filósofo iestá comiendo.

...

presentamos para la última transición un estado intermedio

C[i] = 1significa: filósofo itiene hambre

Ahora cada filósofo pasará cíclicamente por los estados 0, 1, 2, 0 ...... La siguiente pregunta que debe hacerse es: ¿cuándo tiene lugar la (peligrosa) transición del 1 al 2 para el filósofo K?

...

En el universo suponemos declarado

1) el semaphore mutex, inicialmente = 1

2) el integer array C[0:4], con inicialmente todo el elemento = 0

3) semaphore array prisem[0:4]inicialmente con todos los elementos = 0

4) procedure test (integer value K);

if C[(K-1) mod 5] ≠ 2 and C[K]= 1
    and C[(K+1) mod 5] ≠ 2 do
      begin C[K]:= 2; V(prisem[K]) end;

(Este procedimiento, que resuelve la inestabilidad Kcuando está presente, solo se llamará desde una sección crítica).

En este universo, la vida del filósofo wahora puede codificarse

cycle begin think;
            P (mutex);
               C[w]:= 1; test (w);
            V(mutex);
            P(prisem[w]); eat
            P(mutex);
               C[w]:= 0; test [(w+l) mod 5];
               test [(w-1) mod 5];
            V(mutex)
      end

Y esto concluye la solución que buscaba ...


2
Puede que no sea filósofo, porque puedo pensar al mismo tiempo al comer o tener hambre. Y más: ninguno de ellos bebe ni habla.
ott--

5

Solo Dijkstra puede responder con seguridad, pero estaría lo suficientemente seguro de que es arbitrario.

"Fue formulado originalmente en 1965 por Edsger Dijkstra como un ejercicio de examen para estudiantes, presentado en términos de computadoras que compiten por el acceso a los periféricos de las unidades de cinta. Poco después, Tony Hoare dio al problema su formulación actual".

http://en.wikipedia.org/wiki/Dining_philosophers_problem


2
Considere el problema de cuatro comensales en comparación con cinco. ¿Cómo cambia el problema? ¿Es más fácil o más difícil? Esta fue una pregunta de examen: la más difícil es la que se desea hacer.

2

Porque es extraño, ni siquiera. Para que no trates de idear un algoritmo que se base en la simetría o la formación de pares, y mucho más tarde te des cuenta de que no funciona para el caso general.

Esta es una opinión; No tengo conocimiento histórico de lo que cruzó la mente del autor.


Este punto es crucial. Con cuatro filósofos, dos pares de ellos podían turnarse para comer.
Aaron Brick
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.