שיעור 11: משתני תנאי — תיאום threads
mutex מונע race conditions, אך לא מאפשר לthread לחכות עד שתנאי מסוים יתקיים. משתני תנאי (condition variables) מאפשרים לthread לישון בצורה יעילה עד שthread אחר מסמן שמשהו השתנה.
משתנה תנאי הוא כמו פעמון בחנות: אתה מחכה ליד הדלת וכשמישהו מניח פריט במדף הוא מצלצל — אז אתה נכנס.
- משתנה תנאי
- פרימיטיב סנכרון שמאפשר לthread לחכות אטומית לתנאי תוך שחרור ה-mutex, ולהתעורר כשthread אחר מסמן.
- יצרן-צרכן
- תבנית תכנות שבה thread אחד (יצרן) מייצר נתונים ומניח אותם בחוצץ, וthread אחר (צרכן) מוציא ומעבד אותם.
- התעוררות מדומה
- מצב שבו pthread_cond_wait מחזיר למרות שאף thread לא קרא ל-signal. דורש בדיקת תנאי בלולאה.
- broadcast
- pthread_cond_broadcast מעיר את כל ה-threads שחכו על condition variable, בניגוד ל-signal שמעיר רק אחד.
- פרדיקט
- תנאי שבודקים לפני ואחרי pthread_cond_wait כדי להגן מפני spurious wakeups ו-TOCTOU.