פורסם 2009 ביוני 116 שנים אני צריך להפעיל שלושה תרדים שיפעלו במקביל ושמישהו ישלוט עלייהם.זאת אומרת שמישהו אחד יוכל להפעיל אותם או להשהות אותם. לצורך כך אני חייב לסנכרן מידע בייניהם, זאת אומרת שכשאחד יעצור - 2 האחרים יעצרו גם כן.איזה מנגנונים פשוטים קיימים לסינכון ? איך אני יכול לתקוע THREAD לפי פקודה ואז שמישהו יגיד לו להמשיך מאותה הנקודה ?התוכנית כתובה ב C#.
פורסם 2009 ביוני 116 שנים תוסיף את השפה בה אתה כותב לכותרת.אני לא חושב שיש דרך לגרום ל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).
פורסם 2009 ביוני 116 שנים מחבר תודה רבה על התשובה המפורטת.אתה יכול לתת לי דוגמא לשימוש ב MONITOR ?איך THREAD אחד אמור להכיר את המוניטור של ה THREAD השני ? ואיך השלישי אמור לשחרר אותם ?
פורסם 2009 ביוני 116 שנים פה יש דוגמאות להרצת ת'רדים ולסנכרונים:http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspxכל הת'רדים יושבים באותה התכנית, אין להם שום בעיה לתקשר זה עם זה באמצעות פונקציות.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.