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

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

שימושיםעריכה

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

יישוםעריכה

ישנם שני אופנים לבצע המתנה:

חסימה (block)עריכה

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

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

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

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

הערות שולייםעריכה