כתיבת קוד — שיעור 39
Multithreading ב-C
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T3 · בינוני400 נק'~25 דק'algorithmic
זיהוי Deadlock (Circular Wait)
ממש has_deadlock(threads) שמזהה אפשרות ל-deadlock. threads היא רשימה של רצפי-נעילה (שמות מנעולים לפי סדר תפיסה בכל thread). בנה גרף מכוון: לכל שני מנעולים עוקבים a,b ב-thread הוסף קשת a→b (מחזיק a, מבקש b). קיים מעגל בגרף ⇐ Circular Wait ⇐ deadlock פוטנציאלי. החזר True/False.
דוגמאות
has_deadlock([['A','B'], ['B','A']]) → True
has_deadlock([['A','B'], ['A','B']]) → False
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני300 נק'~15 דק'analysis
Race Condition — הערך המינימלי
שני threads מריצים counter += 1 מיליון פעמים כל אחד, ללא נעילה (counter מתחיל ב-0). counter += 1 אינו אטומי (קריאה-שינוי-כתיבה). מהו הערך *המינימלי* האפשרי של counter בסיום, בהינתן שזירה עוינת? הגישו מספר.
דוגמאות
(פורמט) → מספר
הפתרון נשמר מקומית אוטומטית.