2חור ישי2ה
New member
מערכים וThread Safety
אחרי שיישמתי ב"ה בהצלחה ריבוי נימים במחלקה שלי, נוצר בעיה (אמנם צפויה) אחרת: thread safety במערכים (במקרה שלי ArrayList). כאן נתקלתי בבלגן איסופי שאני מקווה שג'סטין יעשה בו סדר. זה בערך מה שמצאתי על הנושא בMSDN: SyncLock Collections and Synchronization (Thread Safety) Managed Threading Best Practices כעת רק כמה שאלות: א. אם ההגדרה של SyncLock היא שלא ניתן להריץ בו זמנית שני נימים של הקוד המוקף, אז מה זה עוזר במקרה של מערכים? הרי אם למשל אסרתי על המתודה של מחיקת פריט לרוץ בו זמנית, עדיין באותו הזמן יהיה ניתן להוסיף פריט... ב. וכן אם משתמשים בפונקציה ArrayList.Synchronized זה מחזיר מופע של SyncArrayList שבסך הכל מקיף כל מתודה של הArrayList המקורי בSyncLock אז חזרנו לבעיה "א"... ג. אם התשובה לשני השאלות הקודמות היא Monitor (אני מאוד מקווה שלא), אז אני לא מצליח למצוא ברשת איזו דוגמה מובנת וקריאה. אני מדגיש שוב, המטרה שלי היא שבזמן שthread אחד עובד עם המערך לא יהיה ניתן לגשת משער הthreadים לאף אחת מהמתודות או מהproperty של אותו המערך. (והthreadים יחכו בתור) תודה מראש.
אחרי שיישמתי ב"ה בהצלחה ריבוי נימים במחלקה שלי, נוצר בעיה (אמנם צפויה) אחרת: thread safety במערכים (במקרה שלי ArrayList). כאן נתקלתי בבלגן איסופי שאני מקווה שג'סטין יעשה בו סדר. זה בערך מה שמצאתי על הנושא בMSDN: SyncLock Collections and Synchronization (Thread Safety) Managed Threading Best Practices כעת רק כמה שאלות: א. אם ההגדרה של SyncLock היא שלא ניתן להריץ בו זמנית שני נימים של הקוד המוקף, אז מה זה עוזר במקרה של מערכים? הרי אם למשל אסרתי על המתודה של מחיקת פריט לרוץ בו זמנית, עדיין באותו הזמן יהיה ניתן להוסיף פריט... ב. וכן אם משתמשים בפונקציה ArrayList.Synchronized זה מחזיר מופע של SyncArrayList שבסך הכל מקיף כל מתודה של הArrayList המקורי בSyncLock אז חזרנו לבעיה "א"... ג. אם התשובה לשני השאלות הקודמות היא Monitor (אני מאוד מקווה שלא), אז אני לא מצליח למצוא ברשת איזו דוגמה מובנת וקריאה. אני מדגיש שוב, המטרה שלי היא שבזמן שthread אחד עובד עם המערך לא יהיה ניתן לגשת משער הthreadים לאף אחת מהמתודות או מהproperty של אותו המערך. (והthreadים יחכו בתור) תודה מראש.