לדלג לתוכן

פתרון תקופות חסד ופרסום

פתרון ראשון

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

פתרון שני

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

פתרון שלישי

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

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