לדלג לתוכן

תרגול מבנה עבודה וסיום שיתופי

הפכו את העובד מן ההרצאה למחלקה עם שתי פעולות סיום: close_and_drain ו־abort. הפעולה הראשונה דוחה עבודות חדשות ומסיימת את הישנות; השנייה מבקשת יציאה מוקדמת ומחזירה רשימה של מזהי עבודות שלא התחילו.

כתבו חוזה עבור עבודה שכבר יצאה מן התור בזמן abort. בחרו אם היא מסתיימת כרגיל או מקבלת stop_token משלה. אין להשתמש ב־TerminateThread.

מקרי קצה

בדקו סיום לפני שהוכנסה עבודה, סיום כאשר העובד ממתין וסיום מיד אחרי הוצאת עבודה מן התור. השתמשו באירוע או במחסום בדיקה כדי לשלוט בנקודת התזמון, בלי להסתמך על Sleep שרירותי.

הציגו סדר הצהרת שדות שמבטיח שהתהליכון מסתיים לפני הרס המצב. הוסיפו בדיקה שבה callback של עבודה מנסה לקרוא לפונקציה ציבורית אחרת של המחלקה, והסבירו מדוע אינכם מריצים אותו תחת נעילת התור.

לבסוף כתבו תרחיש deadlock שבו shutdown מחזיק mutex בזמן join, ואת התיקון המדויק. הגישו את ההוכחה גם אם לא הרצתם את הגרסה שנתקעת.