LiranViper
New member
Thread safe List
היי,
למרות שזה נראה בסיסי בצורה מוגזמת, יש משהו שאני אשמח להתייחסות אודותיו..
יש לי List של אובייקטים, שאני עובר עליה בParallel.ForEach.
בתור הלולאה לעיתים מList נמחק/נוסף אובייקט.
בנוסף, יש ת'רד שממנו יכול להתווסף אובייקט (לא רלוונטי יותר מדי כי כבר קורה בממילא במשפט הקודם שכתבתי).
בגלל שאני צריך אפשרות למחוק, אני לא יכול להשתמש בConcurrencyBag ונשאר לי פחות או יותר לממש לבד Thread safe List..
עולות לי כמה שאלות:
1. מהשיטוטים שלי ברשת, הצלחתי למצוא רק מימושים שעושים שימוש בlock. השאלה היא, למה אין שימוש במנגנונים יותר יעילים כמו ReaderWriterSlimLock?
2. אם מישהו מכיר מימוש שאפשר לסמוך עליו, אני אשמח שיחלוק (מעדיף לא להמציא את הגלגל, בעיקר כשזה גלגל שאפשר לדחוף אליו הרבה אופטימיזציות)
3. אם סעיף 2 לא תרם לי ואני מממש בעצמי, אז האם לשים ReaderWriterSlimLock על wrapper ל- Add,Remover,Get property זה מספיק טוב? אני שואל בעיקר בגלל הGet Property, כי חשבתי על מצב שבו מישהו ניגש דרך הGet לList כדי בקש את הרשימה, והמנגנון שלי דואג שכשהוא מקבל את הרשימה הוא אכן במצבThreadSafe, אבל האם הפנייה לאחר מכן היא כבר לא ThreadSafe? (למשל, פנייה לGet מביאה את הרשימה, והפנייה אח"כ ל- לFirst(..) היא כבר לא בטוחה). כלומר האם אני בעצם להכמיס את הגישה לרשימה עצמה, ולעטוף בנעילה בעצמי גם את כל המתודות First, Exists, Where וכו'
תודה, לירן
היי,
למרות שזה נראה בסיסי בצורה מוגזמת, יש משהו שאני אשמח להתייחסות אודותיו..
יש לי List של אובייקטים, שאני עובר עליה בParallel.ForEach.
בתור הלולאה לעיתים מList נמחק/נוסף אובייקט.
בנוסף, יש ת'רד שממנו יכול להתווסף אובייקט (לא רלוונטי יותר מדי כי כבר קורה בממילא במשפט הקודם שכתבתי).
בגלל שאני צריך אפשרות למחוק, אני לא יכול להשתמש בConcurrencyBag ונשאר לי פחות או יותר לממש לבד Thread safe List..
עולות לי כמה שאלות:
1. מהשיטוטים שלי ברשת, הצלחתי למצוא רק מימושים שעושים שימוש בlock. השאלה היא, למה אין שימוש במנגנונים יותר יעילים כמו ReaderWriterSlimLock?
2. אם מישהו מכיר מימוש שאפשר לסמוך עליו, אני אשמח שיחלוק (מעדיף לא להמציא את הגלגל, בעיקר כשזה גלגל שאפשר לדחוף אליו הרבה אופטימיזציות)
3. אם סעיף 2 לא תרם לי ואני מממש בעצמי, אז האם לשים ReaderWriterSlimLock על wrapper ל- Add,Remover,Get property זה מספיק טוב? אני שואל בעיקר בגלל הGet Property, כי חשבתי על מצב שבו מישהו ניגש דרך הGet לList כדי בקש את הרשימה, והמנגנון שלי דואג שכשהוא מקבל את הרשימה הוא אכן במצבThreadSafe, אבל האם הפנייה לאחר מכן היא כבר לא ThreadSafe? (למשל, פנייה לGet מביאה את הרשימה, והפנייה אח"כ ל- לFirst(..) היא כבר לא בטוחה). כלומר האם אני בעצם להכמיס את הגישה לרשימה עצמה, ולעטוף בנעילה בעצמי גם את כל המתודות First, Exists, Where וכו'
תודה, לירן