Perché cinque filosofi che mangiano?


18

Mi chiedevo perché il problema dei filosofi da pranzo fosse basato su un caso di cinque filosofi. Perché non quattro?

Immagino che possiamo osservare tutti i problemi spiacevoli che possono verificarsi quando discutiamo di cinque esempi di filosofi anche quando ci vengono dati quattro pensatori. Quindi è solo per una ragione storica?


1
Il problema originale è stato descritto da Dijkstra nel 1965 e chiamato Dining Quintuple (che si trova nelle note in cima alla pagina 3).

Mi sembra di aver imparato a conoscere quattro filosofi che cenano ...
Michael Borgwardt,

16
Sono 5 filosofi perché stava cercando di vedere se qualcuno avrebbe mai notato l'ovvio; 5 filosofi insieme parleranno fino a quando il ristorante non li ucciderà, non raccoglieranno mai nemmeno le loro posate. 4 potrebbe avere una pausa nella conversazione abbastanza a lungo per iniziare a mangiare. Con 5 non appena due smettono di parlare per un momento, ce n'è già uno in coda in attesa di interferenza per garantire la continuità.
Jimmy Hoffa,

1
@Jimmy Hoffa - + 1. E perché non risponde?
SChepurin,

Risposte:


17

Secondo quanto scritto in EWD310 "Ordinamento gerarchico di processi sequenziali" , sembra che il numero 5 sia stato scelto a fini educativi, al fine di facilitare agli studenti la comprensione dell'algoritmo progettato per dimostrare la soluzione del problema.

Questo documento sostiene ulteriormente l'idea che il 5 non è realmente rilevante per il problema generale, in primo luogo affermando esplicitamente che "il problema avrebbe potuto essere posto per 9 o 25 filosofi ..." e poi, rappresentandolo in termini di due operazioni simultanee entità, "classe A e classe B, che condividono la stessa risorsa ..."

La soluzione usata da Dijkstra introduce tre "stati filosofici": pensare, mangiare, fame. Il codice presentato per risolvere il problema, gestisce questi tre stati, insieme a un numero non correlato di filosofi.

L'autore avrebbe scelto il numero di filosofi 2, 3 o 4, questo potrebbe causare confusione tra gli studenti che leggono il codice, sia che il numero scelto sia correlato alla quantità di stati o qualcos'altro. Questo può essere facilmente testato provando numeri citati nella descrizione citati da EWD310 di seguito: nota ad esempio come questo possa cambiare [0:4]a [0:3], [0:2], [0:1]e le dichiarazioni che coinvolgono mod.

Al contrario, il numero 5 sembra abbastanza innocente e non invoca associazioni non necessarie. Si può dire che è stato scelto per illustrare meglio che la quantità di filosofi è, beh, arbitraria .


L'algoritmo menzionato è presentato in EWD310 come segue:

... associamo ad ogni filosofo una variabile di stato, diciamo "C", dove

C[i] = 0significa: il filosofo ista pensando

C[i] = 2significa: il filosofo ista mangiando.

...

introduciamo per l'ultima transizione uno stato intermedio

C[i] = 1significa: il filosofo ha ifame

Ora ogni filosofo attraverserà ciclicamente gli stati 0, 1, 2, 0 ...... La prossima domanda da porsi è: quando deve avvenire la (pericolosa) transizione da 1 a 2 per il filosofo K?

...

Nell'universo assumiamo dichiarato

1) il semaphore mutex, inizialmente = 1

2) the integer array C[0:4], con inizialmente tutto element = 0

3) il semaphore array prisem[0:4]con inizialmente tutti gli elementi = 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;

(Questa procedura, che risolve l'instabilità per Kquando presente, verrà chiamata solo all'interno di una sezione critica).

In questo universo la vita del filosofo wpuò ora essere codificata

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

E questo conclude la soluzione a cui stavo puntando ...


2
Allora non potrei essere un filosofo, perché posso pensare allo stesso tempo quando mangio o ho fame. E altro ancora: nessuno di loro sta bevendo o addirittura parlando.
ott--

5

Solo Dijkstra può rispondere con certezza, ma sarei abbastanza sicuro che sia arbitrario.

"È stato originariamente formulato nel 1965 da Edsger Dijkstra come esercizio di esame per studenti, presentato in termini di computer in competizione per l'accesso alle periferiche dell'unità nastro. Poco dopo, Tony Hoare ha dato al problema la sua attuale formulazione."

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


2
Considera il problema di quattro commensali rispetto a cinque. Come cambia il problema? È più facile o più difficile? Questa era una domanda d'esame: la più difficile è probabilmente quella che si desidera porre.

2

Perché è strano, nemmeno. In modo che non provi a escogitare un algoritmo che si basa sulla simmetria o sulla formazione di coppie, e solo molto tempo dopo realizzi che non funziona per il caso generale.

Questa è un'opinione; Non ho alcuna conoscenza storica di ciò che ha attraversato la mente dell'autore.


Questo punto è cruciale. Con quattro filosofi, due coppie potevano mangiare a turno.
Aaron Brick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.