עבור לתוכן

סינכרון בין שלושה תרדים

Featured Replies

פורסם

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

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

איזה מנגנונים פשוטים קיימים לסינכון ?

איך אני יכול לתקוע THREAD לפי פקודה ואז שמישהו יגיד לו להמשיך מאותה הנקודה ?

התוכנית כתובה ב C#.

פורסם

תוסיף את השפה בה אתה כותב לכותרת.

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

(יש ל-thread פונקציה בשם suspend, אבל היא obsolete)

פה יש הסבר על כל מנגנוני הסנכרון המובנים בשפה:

http://msdn.microsoft.com/en-us/library/ms228964.aspx

בשביל לגרום ל-thread לחכות, הת'רד צריך לקרוא לפונקציה Monitor.Wait, ועל מנת להעיר אותו באמצעות ת'רד אחד צריך להשתמש ב-Monitor.Pulse או Monitor.PulseAll (קרא עליהם ב-msdn).

אם אתה רוצה שת'רד אחד יגרום לת'רד אחר לחכות, מה שאני ממליץ הוא כזה: בהנחה שבת'רד שלך רצה איזו לולאה כלשהי, אתה יכול להחזיק בו משתנה בוליאני שאומר "האם הת'רד צריך לעצור". אם הוא true, אז ה-thread יעשה wait. כדי לעצור את הת'רד מבחוץ, כל מה שאתה צריך לעשות זה להפוך את המשתנה הזה ל-true (בשביל זה תגדיר פונקציה שנקראת pause או משהו כזה, ותדאג כמובן שהקריאה לה תהיה מסונכרנת היטב).

יש גם מנגנונים מובנים בשפה שנועדו לטפל בדברים כאלה, שנקראים ManualResetEvent ו-AutoResetEvent, אבל אני לא יודע איך בדיוק משתמשים בהם (קרא ב-msdn).

פורסם
  • מחבר

תודה רבה על התשובה המפורטת.

אתה יכול לתת לי דוגמא לשימוש ב MONITOR ?

איך THREAD אחד אמור להכיר את המוניטור של ה THREAD השני ? ואיך השלישי אמור לשחרר אותם ?

פורסם
  • מחבר

תודה רבה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים