שיעור 10: Mutex — הגנה על נתונים משותפים
כשthread-ים מרובים גשים לנתונים משותפים ללא סנכרון, נוצר race condition — באג שקשה לשחזר ועלול לגרום לנתונים שגויים. ה-mutex (Mutual Exclusion) הוא המנגנון הבסיסי שפותר את הבעיה.
mutex הוא כמו מפתח לשירותים: רק מי שמחזיק את המפתח יכול להיכנס. השאר ממתינים בחוץ.
- mutex (מנעול הדדי)
- Mutual Exclusion — מנגנון סנכרון שמאפשר לthread אחד בלבד להחזיק את המנעול בכל רגע נתון, ובכך מגן על critical section.
- race condition (מרוץ נתונים)
- מצב שבו התוצאה תלויה בסדר הבלתי-צפוי שבו threads מבצעים פעולות. גורם לבאגים שקשה לשחזר.
- קטע קריטי
- קטע קוד שגישה לנתונים משותפים מתרחשת בו; חייב להיות מוגן ב-mutex כדי למנוע race conditions.
- lock_guard
- wrapper RAII ב-C++ שמבצע lock בבנאי ו-unlock ב-destructor, ומבטיח שהמנעול תמיד יישחרר גם בעת חריגה.
- deadlock (מבוי סתום)
- מצב שבו שני threads או יותר מחכים זה לזה לשחרור mutex, ואף אחד לא יכול להתקדם.