Per apa yang tertulis dalam EWD310 "Hierarchical Ordering of Sequences Processes" , sepertinya nomor 5 telah dipilih untuk tujuan pendidikan, untuk memudahkan siswa memahami algoritma yang dirancang untuk menunjukkan solusi dari masalah.
Makalah ini lebih jauh mendukung gagasan bahwa 5 tidak benar-benar relevan dengan masalah umum, pertama dengan secara eksplisit menyatakan bahwa "masalahnya bisa diajukan untuk 9 atau 25 filsuf ..." dan selanjutnya, dengan mewakili dalam hal dua operasi bersamaan entitas, "kelas A dan kelas B, berbagi sumber daya yang sama ..."
Solusi yang digunakan oleh Dijkstra memperkenalkan tiga "keadaan filsuf": berpikir, makan, lapar. Kode disajikan untuk memecahkan masalah, beroperasi ini tiga negara, bersama dengan yang tidak terkait dengan itu sejumlah filsuf.
Apakah penulis telah memilih sejumlah filsuf 2, 3 atau 4, ini dapat menyebabkan kebingungan para siswa membaca kode, apakah nomor yang dipilih terkait dengan jumlah negara atau sesuatu yang lain. Hal ini dapat dengan mudah diuji dengan mencoba angka yang disebutkan dalam deskripsi dikutip dari EWD310 bawah: catatan misalnya bagaimana ini akan berubah [0:4]
untuk [0:3]
, [0:2]
, [0:1]
dan pernyataan yang melibatkan mod
.
Berbeda dengan ini, nomor 5 terlihat cukup polos dan tidak meminta asosiasi yang tidak dibutuhkan. Orang dapat mengatakan bahwa telah dipilih untuk lebih menggambarkan bahwa jumlah filsuf, yah, sewenang-wenang .
Algoritma yang disebutkan disajikan dalam EWD310 sebagai berikut:
... kita asosiasikan dengan masing-masing filsuf variabel negara, "C" katakanlah, di mana
C[i] = 0
berarti: filsuf i
berpikir
C[i] = 2
berarti: filsuf i
sedang makan.
...
kami memperkenalkan untuk transisi terakhir keadaan perantara
C[i] = 1
artinya: filsuf i
lapar
Sekarang setiap filsuf akan melalui siklus negara-negara 0, 1, 2, 0 ...... Pertanyaan berikutnya untuk bertanya adalah: kapan transisi (berbahaya) dari 1 ke 2 terjadi untuk filsuf K
?
...
Di alam semesta kita asumsikan dinyatakan
1) itu semaphore mutex
, awalnya = 1
2) integer array C[0:4]
, dengan awalnya semua elemen = 0
3) semaphore array prisem[0:4]
dengan awalnya semua elemen = 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;
(Prosedur ini, yang mengatasi ketidakstabilan K
ketika ada, hanya akan dipanggil dari dalam bagian kritis).
Di alam semesta ini kehidupan filsuf w
sekarang dapat dikodekan
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
Dan ini menyimpulkan solusi yang saya tuju ...