Thread Safe?...

MotiAd

New member
Thread Safe?...

מה עומד במרכז הרעיון? בהקשר ל-JAVA ומערכות הפעלה?
 

odstudio

New member
מעניין שאף אחד לא עונה...

...אולי זה בגלל שלאנשים אין כוח להסביר את זה? טוב, למרות שגם אני די עייף, הנה ההסבר: המונח Thread safe עומד בהקשר ל- Thread Synchronization. המונח מרמז שקטע קוד מסויים במערכת יודע "להגן" ולבצע לעצמו סינכרוניזציה, כך שחלקים אחרים במערכת ה"משתמשים" בקטע הקוד, פטורים מלבצע את הסינכרוניזציה בעצמם. אם לדוגמה כתבת Class הקורא/כותב ערך מסויים ל- member variable שלו, תוכל לשלב בפונקציות הקריאה/כתיבה שלו את הקוד המסנכרן בין Threads. או-אז מי שמשתמש באובייקט של Class זה, לא צריך לסנכרן בעצמו את השימוש בקריאה/כתיבה לאובייקט, מכיוון ש- Class זה הוא Thread-Safe. כנ"ל לגבי פונקציות בודדות או אפילו מודול שלם (DLL למשל).
 

voguemaster

New member
חלקי...

המונח thread safe מתייחס לכל קטע קוד שניתן לביצוע ע"י כמה threads במקביל. קטע קוד הוא בד"כ פונקציה (אבל לא תמיד), אוסף של פונקציות (כמו ספריה) וכו´.. הרעיון הוא לייצר קוד כזה שכמה threads יוכלו לרוץ עליו במקביל. יש כמה דרכים לעשות זאת, כלומר לכתוב קוד כזה. דוגמא פשוטה היא שימוש במשתנים סטטיים או גלובליים. הזיכרון שבו יושבים המשתנים נגיש לכל ת´רד שרץ בפרוסס ולכן יכול להיווצר מצב שבו יותר מת´רד אחד ניגש לזיכרון באותו הזמן, והם מפריעים אחד לשני, מה שגורם בד"כ לתוצאה לא רצויה. יש כמה שיטות להתגבר על בעיה כזו, בגדול אם אפשר עדיף תמיד לעבוד עם משתנים לוקליים (שמאוחסנים על המחסנית, שזה דבר שיש לכל ת´רד בנפרד), ואם חייבים לעבוד עם משהו סטטי (וזה קורה), אז נכנס הקטע של thread synchronization שמטרתו להגן על האיזור המשותף בזיכרון כדי שישתמשו בו נכון וע"י ת´רד אחד בלבד. ישנם כמה דברים שמאפיינים קוד שהוא MT safe מלבד אלו, אבל אלו קווים מנחים טובים. בהקשר לג´אווה, ג´אווה מספקת אפשרות ל-MT כמובן, וגם אפשרות לביצוע סינכרוניזציה בצורה פשטנית (לפעמים פשטנית מדי). כל מה שצריך זה להכריז על משתנה/מחלקה/פונקציה בתור synchronized וה-JVM תדאג לכך שרק ת´רד אחד יוכל לבצע פעולות על הפריט. מקווה שזה מספק בתור תשובה
 
למעלה