לדלג לתוכן

פתרון תור ועבודה נדחית

לאחר 16 הכנסות התור מלא וההכנסה ה־17 נדחית בלי לשנות Head או Count. אחרי הוצאה אחת והכנסה נוספת ה־tail חוזר לתא שהתפנה, והסדר נשאר FIFO. מונה dropped יכול לגדול תחת אותה נעילה במסלול הדחייה, עם מדיניות overflow מוגדרת אם המוצר צריך דיוק לאורך זמן רב.

במודל worker יחיד, המפיק מכניס לתור תחת lock. אם WorkerScheduled שקר, הוא הופך אותו לאמת ושומר החלטה לתזמן מחוץ לנעילה. הצרכן מרוקן פריטים, וכאשר הוא רואה תור ריק תחת אותו lock הוא מאפס WorkerScheduled לפני שחרורו. מפיק שמגיע אחר כך יראה שקר ויתזמן מחדש. אם תזמון יכול להיכשל, צריך rollback או מסלול חלופי שמחזיר את המצב להסבר תקף; אסור להשאיר דגל אמת בלי worker.

ב־teardown עוצרים admission ומקור חומרה או timer, מבטלים עבודה עתידית וממתינים לכל DPC או work item שכבר קיבל בעלות על context. סדר ההמתנות חייב להימנע מהחזקת lock שהעבודה המסתיימת צריכה. רק לאחר שהספירה או מנגנון ה־rundown מוכיחים שאין משתמשים פעילים משחררים את התור ואת הקוד שאליו callbacks מצביעים. בדיקת קבלה תעצור worker על barrier ותוודא שה־free אינו מתבצע לפני שחרורו.