Neden beş yemek filozofu?


18

Yemek filozofları sorununun neden beş filozof vakasına dayandığını merak ediyordum . Neden dört değil?

Sanırım beş filozof örneğini tartışırken ortaya çıkacak tüm hoş olmayan sorunları dört düşünür verildiğinde de gözlemleyebileceğimizi düşünüyorum. O zaman sadece tarihsel bir nedenden mi?


1
Orijinal sorun 1965'te Dijkstra tarafından tanımlanmış ve Yemek Beşlisi olarak adlandırılmıştır (sayfa 3'ün üst kısmındaki notlarda bulunur ).

Dört yemek filozofunu öğrendiğimi hatırlıyorum ...
Michael Borgwardt

16
Bu 5 filozof, çünkü bariz olanı fark edip edemeyeceğini görmeye çalışıyordu; 5 filozof birlikte restoran ortaya çıkana kadar konuşacak, asla gümüş eşyalarını bile almayacaklar. 4 konuşma yemeye başlayacak kadar uzun bir ara verebilirler. 5 ile herhangi bir an konuşmayı bitirir bitirmez, sürekliliği sağlamak için sırada bekleyen bir tane var.
Jimmy Hoffa

1
@Jimmy Hoffa - + 1. Ve bu neden cevap vermiyor?
SChepurin

Yanıtlar:


17

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] = 0anlamı: filozof idüşünüyor

C[i] = 2şu anlama gelir: filozof iyemek yiyor.

...

son geçiş için bir ara durum sunuyoruz

C[i] = 1şu anlama gelir: filozof i

Ş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 mutexbaş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 Kolduğunda kararsızlığı gideren bu prosedür yalnızca kritik bir bölümden çağrılacaktır).

Bu evrende filozofun hayatı wkodlanabilir

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 ...


2
O zaman bir filozof olmayabilirim, çünkü aynı zamanda yemek yerken veya açken de düşünebilirim. Ve dahası: hiçbiri içki içmiyor, hatta konuşmuyor.
ott--

5

Sadece Dijkstra kesin olarak cevap verebilir, ancak keyfi olduğuna emin olabilirim.

"Başlangıçta 1965 yılında Edsger Dijkstra tarafından teyp sürücüsü çevre birimlerine erişim için yarışan bilgisayarlar açısından sunulan bir öğrenci sınavı olarak formüle edildi. Kısa bir süre sonra Tony Hoare bu probleme mevcut formülasyonunu verdi."

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


2
Beşe kıyasla dört diners sorununu düşünün. Sorun nasıl değişiyor? Daha kolay mı yoksa daha mı zor? Bu bir sınav sorusuydu - muhtemelen sorulması istenen sorudur.

2

Çünkü bu garip, hatta değil. Böylece simetriye veya çift oluşturmaya dayanan bir algoritma geliştirmeye çalışmazsınız ve ancak daha sonra genel durum için işe yaramadığını fark edersiniz.

Bu bir görüş; Yazarın zihnini neyin aştığı hakkında hiçbir tarihsel bilgim yok.


Bu nokta çok önemlidir. Dört filozof ile iki çift sırayla yemek yiyebilir.
Aaron Brick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.