کسی که میخواد مسئله عذاخوردن فیلسوفان رو حل کنه دیگه نباید دغدغه syntax کدنویسی داشته باشه.
این مسئله مربوط میشه به درس سیستم عامل و فکر کنم پیشنیاز این درس برنامه نویسی پیشرفته باشه (که هست / اما با این مدل آموزشهای امروزی عملا دانشجو چیزی یاد نمیگیره!)
شکل صحیح مسئله این هست:
پنچ نفر فیلسوف دور یه میز نشستن. اینها یا فکر می کنن یا اینکه غذا میخورن. جلوی هر کدوم یه بشقاب هست. و سمت چپ بشقاب هرکدوم یک عدد چوب برای غذا خوردن (مثل ژاپنیها) به این چوب ها chopstick میگن. پس در حالت کلی برای n فیلسوف n بشقاب و n چوب برای غذا خوردن وجود داره. مثل این شکل:
در هر زمان ممکنه یکی از فیلسوفان بخواد غذا بخوره و از اونجایی که برای غذا خوردن به دوتا chopstick نیاز داره در دو مرحله اقدام به برداشتن چوبها میکنه.
چند حالت پیش میاد.
یا اینکه هیچ چوبی رو نمی بینه یا فقط یه چوب رو می بینه که در این حالت چون عذاخوردن با یه چوب ممکن نیست بیخیال میشه و دوباره میره تو فکر.
حالت دوم اینه که هر دوتا چوب رو میبینه. پس در دو گام اقدام به برداشتن چوب ها می کنه.
در گام اول یک چوب رو برمیداره و در گام دوم چوب بعدی رو.
حالا مسئله مورد نظر همین جا شکل میگیره. فیسلوفی تا وقتی که کارش با چوب ها تموم نشه پسشون نمیده. در عین حال کسی هم نمی تونه مجبورش کنه که چوبی که برداشته رو پس بده. (مثل منبع چاپگر در سیستم که وقتی فرستادی برای چاپ دیگه رفته و نمیشه وسط کار که نصف صفحه چاپ شده قضیه رو کنسل کنی).
اما کجاش مسئله ساز میشه؟ فرض کنید که هر n تا فیلسوف با هم گرسنهشون بشه و همهگی با هم ببینن که دو تا چوب غذاخوری وجود داره و برن توی پروسه برداشتن چوبها. بدتر از اون اینکه همگی همزمان با هم در گام اول چوب های یک سمت (مثلا سمت چپ) رو برمیدارن و در گام دوم که میخوان اقدام به برداشتن چوب دوم (سمت راست) کنن همه شون با هم به بن بست میرسن. در این حالت نه کسی میتونه غذابخوره و نه کسی چوبش رو پس میده. در حالت کلی فقط کسی چوبش رو پس میده که عذاش رو خورده باشه.
یک راه حل این مسئله استفاده از سمافور هست که دوستان هم اشاره کردن. اما سمافورها نمیتونن مسئله گرسنگی رو حل کنن (یعنی یه فیلسوف مادام منتظر بمونه تا بقیه غذاشون رو بخورن)
راه حل دیگه استفاده از ناظر (monitor) هست که به مراتب بهتر از سمافور قضیه رو حل میکنه.
شما برای حل این مسئله میبایست بحث مناطق بحرانی رو خوب بلد باشید و بعد اقدام به دادن نظریه و یا استفاده از ساختارهایی مثل سمافور یا ناظر برای حلش کنید.
موفق باشید.