EWD310 में लिखा है "अनुक्रमिक प्रक्रियाओं के पदानुक्रमित" , ऐसा लगता है कि नंबर 5 को शैक्षिक उद्देश्यों के लिए चुना गया है, ताकि छात्रों को समस्या के समाधान को प्रदर्शित करने के लिए डिज़ाइन किए गए एल्गोरिदम को समझना आसान हो सके।
यह बहुत कागज आगे इस विचार का समर्थन करता है कि 5 वास्तव में सामान्य समस्या के लिए प्रासंगिक नहीं है, पहले स्पष्ट रूप से यह कहते हुए कि "समस्या 9 या 25 दार्शनिकों के लिए रखी जा सकती थी ..." और इसके बाद, दो समवर्ती संचालन के संदर्भ में इसका प्रतिनिधित्व करते हुए इकाइयाँ, "वर्ग ए और वर्ग बी, समान संसाधन साझा कर रहे हैं ..."
दिज्क्स्त्र द्वारा उपयोग किया जाने वाला समाधान "दार्शनिक की तीन अवस्थाओं" का परिचय देता है: सोच, भोजन, भूख। समस्या को हल करने के लिए प्रस्तुत कोड, इन तीन राज्यों को संचालित करता है, इसके साथ ही एक असंबंधित दार्शनिकों की संख्या भी है।
क्या लेखक ने दार्शनिकों की संख्या 2, 3 या 4 को चुना है, इससे छात्रों को कोड पढ़ने में भ्रम हो सकता है, चाहे चुना हुआ संख्या राज्यों की राशि से संबंधित हो या कुछ और। यह आसानी से विवरण में उल्लेख संख्या नीचे EWD310 से उद्धृत की कोशिश कर रहा द्वारा परीक्षण किया जा सकता है: उदाहरण के लिए टिप्पणी है कि यह कैसे बदल जाएगा [0:4]
करने के लिए [0:3]
, [0:2]
, [0:1]
को शामिल और बयानों mod
।
जैसा कि इसके विपरीत, नंबर 5 काफी निर्दोष दिखता है और अनावश्यक संघों को आमंत्रित नहीं करता है। कोई कह सकता है कि यह बेहतर चित्रण करने के लिए चुना गया है कि दार्शनिकों की राशि, अच्छी तरह से, मनमाना है ।
उल्लेखित एल्गोरिथ्म EWD310 में निम्नानुसार प्रस्तुत किया गया है:
... हम प्रत्येक दार्शनिक को एक राज्य चर के साथ जोड़ते हैं, "सी" कहते हैं, जहां
C[i] = 0
का अर्थ है: दार्शनिक i
सोच रहा है
C[i] = 2
का अर्थ है: दार्शनिक i
खा रहा है।
...
हम अंतिम संक्रमण के लिए एक मध्यवर्ती स्थिति का परिचय देते हैं
C[i] = 1
का अर्थ है: दार्शनिक i
भूख लगी है
अब प्रत्येक दार्शनिक 0, 1, 2, 0 ...... के माध्यम से चक्रीय रूप से जाएगा। पूछने वाला अगला प्रश्न है: दार्शनिक के लिए जगह लेने के लिए 1 से 2 तक (खतरनाक) संक्रमण कब हुआ है K
?
...
ब्रह्मांड में हम घोषित घोषित
1) semaphore mutex
, शुरू में = 1
2) integer array C[0:4]
, शुरू में सभी तत्व = 0 के साथ
3) semaphore array prisem[0:4]
शुरू में सभी तत्वों के साथ = 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;
(यह प्रक्रिया, जो K
वर्तमान के लिए अस्थिरता को हल करती है , केवल एक महत्वपूर्ण खंड के भीतर से ही बुलाया जाएगा)।
इस ब्रह्मांड में दार्शनिक के जीवन को w
अब कोडित किया जा सकता है
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
और यह उस समाधान को समाप्त करता है जिसका मैं लक्ष्य बना रहा था ...