מימוש סמפורים ב-XINU
- לכל סמפור משויך מונה בעל ערכים
שלמים.
- תהליך המבקש לחכות קורא ל-wait(s). כתוצאה
מכך יפחת s ב-1. אם הערך המתקבל שלילי התהליך יחכה, אחרת, התהליך ימשיך לעבוד בלי לחכות.
- תהליך המבקש לשחרר תהליך אחר יקרא
ל-signal(s). כתוצאה מכך יגדל ערך s ב-1. אם הערך המתקבל חיובי, אין תהליך מחכה. אם הערך אינו חיובי, משתחרר אחד התהליכים המחכים לסמפור.
- wait,
signal הינם פעולות אטומיות.
- ערכו המוחלט של מונה הסמפור: אם הוא חיובי - מספר פעולות ה-wait שיכולות להתבצע ללא המתנה. אם
הוא שלילי - מספר התהליכים המחכים
לסמפור.
- תהליך שבא לחכות על הסמפור נכנס
לסוף התור של הסמפור.
כאשר אנו
מוציאים (signal) תהליך
מהרשימה, אנו מוציאים תהליך מראש
התור. כתוצאה מכך: תהליך שנכנס ראשון לרשימת ההמתנה
יצא ממנה ראשון, יקבל רשות לבצע את הקטע
הקריטי ראשון.
|
|
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.