EWD310 "Sıralı Süreçlerin Hiyerarşik Sıralaması" nda yazılanlara göre , öğrencilerin problemin çözümünü göstermek için tasarlanmış algoritmayı anlamalarını kolaylaştırmak için 5 numaralı eğitim amaçlı seçilmiştir.
Bu makale ayrıca 5'in genel problemle gerçekten ilgili olmadığı fikrini desteklemektedir, ilk önce açıkça "problemin 9 veya 25 filozof için ortaya atılabilirdi ..." ve daha sonra, aynı anda çalışan iki açıdan temsil ederek varlıkları, "A sınıfı ve B sınıfı, aynı kaynağı paylaşıyor ..."
Dijkstra tarafından kullanılan çözüm üç "filozof hali" getirmektedir: düşünme, yemek yeme, aç. Sorunu çözmek için sunulan kod, bu üç durumu ve bununla ilgili olmayan filozofların sayısıyla ilişkilidir .
Yazar, 2, 3 veya 4 filozof sayısını seçerse, bu, seçilen sayı devletlerin miktarı veya başka bir şeyle ilgili olsun, öğrencilerin kodu okuyan karışıklığa neden olabilir. Bu nasıl değiştireceği örneğin not: Bu kolayca aşağıda EWD310 alıntı açıklamasında belirtilen sayılar deneyerek test edilebilir [0:4]
üzere [0:3]
, [0:2]
, [0:1]
karıştığı ve ifadeleri mod
.
Buna karşılık, 5 numara oldukça masum görünüyor ve gereksiz dernekleri çağırmıyor. Bir filozof sayısının keyfi olduğunu daha iyi göstermek için seçildiğini söyleyebiliriz .
Bahsedilen algoritma EWD310'da aşağıdaki gibi sunulmaktadır:
... her filozofla bir devlet değişkeni "C" diyoruz,
C[i] = 0
anlamı: filozof i
düşünüyor
C[i] = 2
şu anlama gelir: filozof i
yemek yiyor.
...
son geçiş için bir ara durum sunuyoruz
C[i] = 1
şu anlama gelir: filozof i
aç
Şimdi her filozof 0, 1, 2, 0 eyaletlerinde döngüsel olarak ilerleyecektir ... Sorulması gereken bir sonraki soru: filozof için 1'den 2'ye (tehlikeli) geçiş ne zaman gerçekleşecek K
?
...
Evrende
1) semaphore mutex
başlangıçta = 1
2) integer array C[0:4]
başlangıçta tüm öğe = 0 ile
3) semaphore array prisem[0:4]
başlangıçta tüm elemanları olan = 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;
(Var K
olduğunda kararsızlığı gideren bu prosedür yalnızca kritik bir bölümden çağrılacaktır).
Bu evrende filozofun hayatı w
kodlanabilir
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
Bu da hedeflediğim çözümü bitiriyor ...