לדלג לתוכן

תרגול סנכרון ומצב משותף

כתבו Budget שמנהל מספר מקומות פנויים. הפעולה TryAcquire מצליחה רק אם יש מקום ומקטינה את המספר באטומיות; Release מחזירה מקום ודוחה שחרור שגורם לחריגה מן הקיבולת. הציגו גרסת lock מלאה וגרסת CompareExchange עבור המספר בלבד.

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

שנו את Ledger כך ש־Snapshot ידלג על lock, וכתבו תרחיש עקרוני שמחזיר count חדש עם bytes ישן. אין צורך להבטיח שהכשל יופיע בכל הרצה כדי להראות שהחוזה נשבר.