Pourquoi cinq philosophes du dîner?

18

Je me demandais pourquoi le problème des philosophes de la restauration est basé sur un cas de cinq philosophes. Pourquoi pas quatre?

Je suppose que nous pouvons observer tous les problèmes désagréables qui peuvent survenir lorsque nous discutons de l'exemple de cinq philosophes également lorsque nous avons quatre penseurs. Est-ce alors uniquement pour une raison historique?

falconepl
la source
1
Le problème d'origine a été décrit par Dijkstra en 1965 et appelé le Quintuple à manger (trouvé dans les notes en haut de la page 3).
Je crois me souvenir d'avoir appris près de quatre philosophes de la restauration ...
Michael Borgwardt
16
C'est 5 philosophes parce qu'il essayait de voir si quelqu'un remarquerait jamais l'évidence; 5 philosophes parleront ensemble jusqu'à ce que le restaurant les expulse, ils ne ramasseront même jamais leur argenterie. 4 pourraient avoir une pause dans la conversation assez longtemps pour qu'ils commencent à manger. Avec 5 dès que deux arrêtent de parler pendant un moment, il y en a déjà un dans la file d'attente qui attend d'interrompre pour assurer la continuité.
Jimmy Hoffa
1
@Jimmy Hoffa - + 1. Et pourquoi cela ne répond-il pas?
SChepurin

Réponses:

17

Selon ce qui est écrit dans EWD310 "Ordre hiérarchique des processus séquentiels" , il semble que le numéro 5 ait été choisi à des fins éducatives, afin de faciliter la compréhension par les élèves de l'algorithme conçu pour démontrer la solution du problème.

Ce même article soutient en outre l'idée que 5 n'est pas vraiment pertinent pour un problème général, d'abord en déclarant explicitement que "le problème aurait pu être posé pour 9 ou 25 philosophes ..." et ensuite, en le représentant en termes de deux fonctionnant simultanément entités, "classe A et classe B, partageant la même ressource ..."

La solution utilisée par Dijkstra introduit trois "états de philosophe": penser, manger, faim. Le code présenté pour résoudre le problème, exploite ces trois états, ainsi qu'un nombre sans rapport avec lui de philosophes.

Si l'auteur a choisi le nombre de philosophes 2, 3 ou 4, cela pourrait causer de la confusion aux étudiants qui lisent le code, que le nombre choisi soit lié à la quantité d'états ou à autre chose. Cela peut facilement être testé en essayant numéros mentionnés dans la description ci - dessous cités de EWD310: Note par exemple , comment cela changerait [0:4]à [0:3], [0:2], [0:1]et les déclarations concernant mod.

Par opposition à cela, le numéro 5 semble assez innocent et n'invoque pas d'associations inutiles. On peut dire qu'il a été choisi pour mieux illustrer cette quantité de philosophes est bien arbitraire .


L'algorithme mentionné est présenté dans EWD310 comme suit:

... nous associons à chaque philosophe une variable d'état, disons "C", où

C[i] = 0signifie: le philosophe ipense

C[i] = 2signifie: le philosophe imange.

...

on introduit pour la dernière transition un état intermédiaire

C[i] = 1signifie: le philosophe ia faim

Maintenant, chaque philosophe passera cycliquement par les états 0, 1, 2, 0 ...... La prochaine question à se poser est: quand la transition (dangereuse) de 1 à 2 a-t-elle lieu pour le philosophe K?

...

Dans l'univers, nous supposons déclaré

1) le semaphore mutex, initialement = 1

2) le integer array C[0:4], avec initialement tout élément = 0

3) le semaphore array prisem[0:4]avec initialement tous les éléments = 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;

(Cette procédure, qui résout l'instabilité Klorsqu'elle est présente, ne sera appelée qu'à partir d'une section critique).

Dans cet univers, la vie du philosophe wpeut maintenant être codée

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

Et cela conclut la solution que je visais ...

moucheron
la source
2
Je ne serais peut-être pas philosophe alors, car je peux penser en même temps en mangeant ou en ayant faim. Et plus encore: aucun d'entre eux ne boit ni ne parle.
ott--
5

Seul Dijkstra peut répondre avec certitude, mais je serais suffisamment confiant que c'est arbitraire.

"Il a été formulé à l'origine en 1965 par Edsger Dijkstra comme un exercice d'examen étudiant, présenté en termes d'ordinateurs en compétition pour l'accès aux périphériques du lecteur de bande. Peu de temps après, Tony Hoare a donné au problème sa formulation actuelle."

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

Eoin Carroll
la source
2
Considérez le problème de quatre convives par rapport à cinq. Comment le problème change-t-il? Est-ce plus facile ou plus difficile? C'était une question d'examen - la plus difficile est probablement celle que l'on souhaite poser.
2

Parce que c'est bizarre, pas même. Pour que vous n'essayiez pas de concevoir un algorithme qui repose sur la symétrie ou la formation de paires, et que vous vous rendez compte beaucoup plus tard que cela ne fonctionne pas pour le cas général.

Ceci est une opinion; Je n'ai aucune connaissance historique de ce qui a traversé l'esprit de l'auteur.

Emilio M Bumachar
la source
Ce point est crucial. Avec quatre philosophes, deux paires pouvaient manger à tour de rôle.
Aaron Brick