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
এবং এটি যে সমাধানটির দিকে লক্ষ্য রেখেছিলাম তা শেষ করে ...