Shared Memory

Shared Memory

שלום, יצרתי shared memory segment בשביל להעביר נתונים בין שני פרוססים, איך פרוסס יכול לדעת מתי הפרוסס השני כתב נתונים לסיגמנט ? זה בטוח משהו עם סמפורות... השאלה מה... שאלה נוספת ב IPC .. יש לי Message Queue, האם יש דרך לדעת כמה אנשים מאזינים ל Queue ? אני משתמש ב gcc.
 

gilad_no

New member
IPC שרת לקוח

בדר"כ מממשים את זה עם מיוטקסים וארועים. לכל צד (שרת או לקוח) יש THREAD אשר מאזין לארוע כתיבה של הצד השני. שרת: 1. האזן לארוע כתיבה של לקוח 2. תפוס מיוטקס כתיבה 3. כתוב תשובה ללקוח 4. שחרר מיוטקס כתיבה 5. הפעל ארוע כתיבה של שרת לקוח: 1. האזן לארוע כתיבה של שרת 2. תפוס מיוטקס כתיבה 3. כתוב תשובה לשרת 4. שחרר מיוטקס כתיבה 5. הפעל ארוע כתיבה של לקוח בעצם התהליכים מאותתים אחד לשני בעזרת ארועים. ישנה חשיבות לשימוש במיוטקס כדי למנוע מצב ששני התהליכים ניגשים לזיכרון המשותף בו זמנית וגורמים לשגיאה של חלונות. דרך נוספת לממש את זה זה בעזרת PIPES, ואז ניתן להפעיל WaitForSingleObject על הצינור עצמו ולדעת מתי נכתבו אליו נתונים (במקום זיכרון משותף)
 

cyberia2ooo

New member
הוא שאל על סביבת posix

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

gilad_no

New member
לא ראיתי שום POSIX

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

cyberia2ooo

New member
צודק :) אני פשוט הנחתי מהשאלה עצמה

שהוא עובד על מערכת POSIX כלשהי... ושם כמו שאמרתי mutexים זה כלי שממומש לפי הספריית ת'רדים שבה אתה משתמש, ומשמשת לסינכורניזציה של מטלות ולא של תהליכים, בשביל תהליכים יש כלים אחרים.
 
למעלה