SysV semaphores

SysV semaphores

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

WarLord

New member
5.2 Processes Semaphores

אני מניח שאת החלק הזה קראת. הרעיון הוא שלפני שפרוסס מסויים כותב לקטע המשותף הוא מבצע WAIT ובכך "תופס" את הסמפור. ברגע שהוא מסיים הוא משחרר את הסמפור (POST). אם פרוסס מסוים לקח את הסמפור ועדיין לא שיחרר, כל פרוסס אחר שינסה לתפוס את הסמפור ייחסם בקריאה ל WAIT ויפסיק לרוץ עד שהפרוסס הראשון ישחרר את הסמפור.
 
המממ...

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

DecayCell

New member
למה שלא...

תעשה משתנה דגל משותף, שאחרי כתיבה לזיכרון יסומן בו שיש נתונים חדשים, והתהליכים שקוראים מהזיכרון המשותף יבדקו אותו אחת לכמה זמן?
 
משתנה סביבה?

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

DecayCell

New member
תוכל להשתמש במערכת שליחת הודעות

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