Perché cinque filosofi cenati?

18

Mi stavo chiedendo perché il problema dei filosofi della ristorazione si basi su un caso di cinque filosofi. Perché non quattro?

Suppongo che possiamo osservare tutti gli aspetti spiacevoli che possono verificarsi quando si parla di cinque filosofi di esempio anche quando ci vengono dati quattro pensatori. E 'solo per una ragione storica allora?

    
posta falconepl 21.02.2013 - 17:52
fonte

3 risposte

17

Per quanto scritto in EWD310 "Ordinamento gerarchico di processi sequenziali" , sembra che il numero 5 sia stato scelto a scopo didattico, al fine di rendere più facile per gli studenti la comprensione dell'algoritmo progettato per dimostrare la soluzione del problema.

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

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

L'autore avrebbe scelto il numero di filosofi 2, 3 o 4, questo potrebbe causare confusione tra gli studenti che leggono il codice, se il numero scelto è correlato alla quantità di stati o qualcos'altro. Questo può essere facilmente provato provando i citati numeri nella descrizione citata dall'EWD310 qui sotto: nota per esempio come questo cambierebbe [0:4] in [0:3] , [0:2] , [0:1] e affermazioni che coinvolgono mod .

Contrariamente a questo, il numero 5 sembra abbastanza innocente e non richiama associazioni non necessarie. Si può dire che è stato scelto per meglio illustrare quella quantità di filosofi è, beh, arbitrario .

L'algoritmo menzionato viene presentato in EWD310 come segue:

...we associate with each philosopher a state variable, "C" say, where

C[i] = 0 means: philosopher i is thinking

C[i] = 2 means: philosopher i is eating.

...

we introduce for the last transition an intermediate state

C[i] = 1 means: philosopher i is hungry

Now each philosopher will go cyclically through the states 0, 1, 2, 0 ...... The next question to ask is: when has the (dangerous) transition from 1 to 2 to take place for philosopher K?

...

In the universe we assume declared

1) the semaphore mutex, initially = 1

2) the integer array C[0:4], with initially all element = 0

3) the semaphore array prisem[0:4] with initially all elements = 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;

(This procedure, which resolves unstability for K when present, will only be called from within a critical section).

In this universe the life of philosopher w can now be coded

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

And this concludes the solution I was aiming at...

    
risposta data 21.02.2013 - 19:46
fonte
5

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

"It was originally formulated in 1965 by Edsger Dijkstra as a student exam exercise, presented in terms of computers competing for access to tape drive peripherals. Soon after, Tony Hoare gave the problem its present formulation."

link

    
risposta data 21.02.2013 - 18:47
fonte
2

Perché è strano, nemmeno pari. In modo che tu non provi a concepire un algoritmo che si basa sulla simmetria o sulla formazione di coppie, e solo molto più tardi realizzerà che non funziona nel caso generale.

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

    
risposta data 23.02.2013 - 19:39
fonte

Leggi altre domande sui tag