Description
תרגול 11# – פילוסופים סועדים
במעבדה היום נממש פתרון לבעיית הפילוסופים הסועדים ,Dining Philosophers.
יש לשער שכבר פגשתם ניסוח של בעיה זו בשיעור אחר, אבל לשם השלמות נחזור עליה כאן:
סביב שולחן עגול ישובים 5 פילוסופים. פילוסופים מסוגלים לשני סוגי פעילות:
אכילה והגות. בשעה שהם הוגים אין להם צורך בדבר, אך בשעת האכילה הם זקוקים לכלי אוכל . לדאבונם, המזון היחידי המוגש הוא ספגטי, שכדי לאכלו בנימוס יש צורך בשני מזלגות. מאידך, בין כל שני פילוסופים מונח מזלג אחד .
כשפילוסוף אוכל, עליו ליטול גם את מזלג שמימינו וגם את זה שמשמאלו .
ממילא, הפילוסופים הישובים משני צדדיו מנועים מלאכול באותו הזמן .
אם כן, סדר יומו של פילוסוף הוא כדלקמן:
1. הפילוסוף הוגה בדברים ברומו של עולם לזמן מה, עד אשר הוא נעשה רעב.
2. הפילוסוף נוטל את המזלגות שמימינו ומשמאלו על מנת לאכול; אם הם תפוסים הוא מחכה שיתפנו .
3. הפילוסוף אוכל זמן מה עד ששבע.
4. … וחוזר חלילה.
מרצה: דר’ רון סיוון תכות מוחה עצמים – 61310 סמסטר אביב תשפ”ב מתרגלים: גדי שור ושמעון אושר
המערכת כוללת כמה מחלקות:
1. המנשק IPhilosopher (נתון במודל).
2. המחלקה Philosopher המממשת את הממשק הנ”ל (אותה יש לכתוב).
מחלקה זו מדמה את ההתנהגות של פילוסוף בצורה שנמנעת מקיפאון (deadlock). קיפאון נוצר כאשר כל פילוסוף מחזיק במזלג אחד ומחכה לשני, שכמובן לא יהפוך זמין אף פעם . יש להתאים את הבנאי ל main הנתון ולהריץ חמישה מופעים של מחלקה זו.
Philosopher(int place, List<Fork> forks, int meals) מספר ארוחות ביום ,אוסף המזלגות ,מיקום בשולחן
*אפשר לשנות את הבנאי בהתאם לצורך
3. המחלקה Fork(נתונה במודל), המדמה התנהגות של מזלג. מזלג הוא או פנוי או תפוס בידי אחד הפילוסופים. אף ממחלקה זו נחוצים חמישה מופעים.
4. המחלקה RandomSleep (נתונה במודל), המממשת מתודה sleep() הגורמת לחוט שקורא לה לישון לתקופה של בין 1 ל8- מילישניות. יתרונה על פני שימוש ב-Math.random() ו-Thread.sleep() בכך שאיננה סינכרונית ולכן אינה משפיעה על התזמון של החוטים .
5. המחלקה הראשית Lab11Test המכילה את ה-main() של התכנית כולה .
המחלקה נתונה אף היא במודל וניתן לבצע בה שינויים על פי הצורך.
• הריצו את התוכנית עם מספר סעודות קטן יחסית בכדי שהתוכנית תיעצר בזמן סביר .
יש מחלקה נוספת ,Monitor, שגם נתונה במודל וכל תפקידה הוא להציג את המצב של הפילוסופים .היא משתמשת במתודות שעל כל פילוסוף לממש (בגלל המנשק Philosopher) כדי לתחקר את מצב המערכת. אין לה כל השפעה על פעולת החוטים .
תפקיד המויטור הוא רק להציג בצורה גרפית את העשה בשולחן הסעודה ויש להוריד את השורה הזו מה main לפי ההגשה לבודק האוטומטי.
השתדלו להימנע מהדפסות בתכנית שלכם, וזאת משום שהדפסה היא פעולה יקרה שדורשת זמן רב ומעוותת את ההתנהגות המתוזמנת של החוטים שכתבתם, ועלולה להסתיר את תופעות התזמון שעלולות להיגרם מתכנות לא זהיר .
בהצלחה!




Reviews
There are no reviews yet.