המתנה (מדעי המחשב)

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

שימושים

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

סוגי יישום

ישנם שני סוגי המתנות:

חסימה (block)

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

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

המתנה פעילה (busy waiting)

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

הערות שוליים

תהליכים (מדעי המחשב)