תרגול בעלות ותיאום בין תהליכונים¶
הרחיבו את Channel מההרצאה לשני יצרנים ושני צרכנים. כל יצרן שולח טווח מספרים נפרד, וכל צרכן שומר סכום ומספר פריטים במשתנים שבבעלותו בלבד. ה־main מצרף את התוצאות רק לאחר סיום כולם.
בדיקות מצב¶
א. הגדירו קיבולת אחת והוכיחו שכל פריט נצרך בדיוק פעם אחת. אל תסתפקו בסכום, משום ששגיאות שונות יכולות לבטל זו את זו.
ב. סגרו את התור בזמן שיצרן ממתין לתור מלא. היצרן צריך לחזור עם כישלון, והצרכנים צריכים לרוקן את הפריטים שכבר התקבלו.
ג. סגרו תור ריק כאשר שני צרכנים ממתינים. שניהם צריכים להסתיים, ולא רק הראשון שהתעורר.
ד. הוסיפו פונקציית צילום מצב שמחזירה גודל ודגל סגירה יחד. הסבירו מדוע קריאה לשתי פונקציות נפרדות אינה בהכרח צילום עקבי.
הגישו גם תרחיש תזמון בן חמישה צעדים שמדגים lost wakeup במימוש פגום, ואת ה־invariant שמונע אותו במימוש שלכם. אין להריץ בכוונה תוכנית שנתקעת ללא timeout חיצוני של סביבת הבדיקה.