לדלג לתוכן

פתרון סדרי נעילה

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

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

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