מה זה thread safety או thread safe - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מה זה thread safety או thread safe


IdoShamriz

Recommended Posts

ברור :xyxthumbs:

באותו התהליך (Process) יכולים לרוץ כמה תהליכונים (או נימים או חוטים איך שלא תקרא לזה) במקביל.

זה עוזר לספק למשתמש אפשרות לעשות כמה דברים במקביל וכמו כן זמן ריצה חלק יותר.

קישור לתוכן
שתף באתרים אחרים

סבבה. אז נניח שכמה נימים מנסים לגשת למשאב משותף (לדוגמה זכרון) בו זמנית. מה יקרה?

לדוגמה, נניח שיש איזשהו משתנה בשם x, ושני נימים מנסים להוסיף לו 1. איך זה עובד? כל נים צריך לקרוא את המשתנה מהזכרון, להוסיף לו 1, ולכתוב את התוצאה בחזרה לזכרון. אז אם לדוגמה ערכו ההתחלתי הוא 0, ושני נימים מנסים לעשות את הפעולה הזו בדיוק בו זמנית, זה מה שיקרה (זה כמובן פישוט של מה שיקרה באמת, אבל זה רק לצורך ההדגמה):

1. נים א' יקרא 0 מ-x שיושב בזכרון.

2. נים ב' יקרא 0 מ-x שיושב בזכרון.

3. נים א' יוסיף 1 לערך שהוא קרא.

3. נים ב' יוסיף 1 לערך שהוא קרא.

4. נים א' יכתוב את הערך 1 לתוך x.

5. נים ב' יכתוב את הערך 1 לתוך x.

אז למרות ש-x היה אמור לגדול ב-2, הוא רק גדל ב-1.

השגיאה הזו נקראת Race Condition, וקטע הקוד הזה שמשתמש במשאב משותף (המשתנה x) נקרא "קטע קריטי". קטע קוד (או פונקציה, או מחלקה) קרוי Thread Safe אם שני ת'רדים יכולים להפעיל אותו זו זמנית בלי חשש לשגיאות כאלה. בשביל להפוך קטעי קוד ל-Thread safe צריך להשתמש במנגנוני נעילה, סנכרון ותיאום בין ת'רדים, שבד"כ מובנים בתוך השפה. לדוגמה, בג'אווה אפשר להשתמש במילה השמורה synchronized, שדואגת שאת קטע הקוד או הפונקציה רק ת'רד אחד יוכל להפעיל בכל רגע נתון (אם עוד ת'רד מנסה להפעיל את הפונקציה, אז הוא צריך לחכות עד שהקודם יסיים):

http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

קישור לתוכן
שתף באתרים אחרים

כמובן שאתה צודק, לשפה אין שום משמעות אבל אם יש שפה שאתה כבר שולט בה אני יודע שלי למשל נוח לראות דוגמאות קוד בשפות שאני מכיר.

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...