שאלה על המונח "חבק"

white shadow 3

New member
שאלה על המונח "חבק"

הי..
שאלה שנתקלנו בה מספר חברים ויש קצת ויכוח בנושא

נניח ויש לי פונקציה f() כלשהיא שבתוכה יש בדיקת
קוד:
f() {
...
...
...
while (...);
}
ונניח כי יש 2 תתי-תהליך כך שתת תהליך ראשון מתחיל לבצע את הפונקציה, ותת תהליך שני יכול להתחיל את f() רק לאחר שתת תהליך ראשון סיים..

כעת נניח שתת תהליך ראשון התחיל, הגיע ל-while וקיבל תוצאת TRUE לכן נתקע שם.
ידוע כי *אם* תת תהליך 2 היה במצב הנוכחי יכול להתחיל את f() אז הוא היה משחרר את תת-תהליך 1 מלולאת ה-while הזאת ותת תהליך 1 היה יכול להמשיך להתקדם..

האם המצב הנוכחי, בו תת תהליך 1 תקוע ב-while ותת תהליך שני לא יכול להתחיל את ביצוע f() כיוון שצריך לחכות לסיום מלא של תת תהליך 1, נחשב כ"חבק"?
(כביכול בחבק כל תת תהליך מחכה לסיום של תת התהליך האחר, וכאן ברור שתת תהליך 2 מחכה לתת תהליך 1, אך האם זה נחשב שתת תהליך 1 "מחכה" לתת תהליך 2?

תודה!
 

פרסאוס

New member
אני מניח שאתה מתכוון לdeadlock

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

BravoMan

Active member
המקום היחיד בו נתקלתי במילה "חבק"

היה בארומה, זה חתיכת קרטון עגולה כזו ששמים סביב כוס קפה חם כדי שאפשר יהיה להחזיק בו בלי לחטוף כוויה.
&nbsp
בכול אופן, א"פ ההגדרה הנקייה זה לא deadlock, כי תת תהליך ראשון לא מחכה לשני, ותאורטית, מישהו אחר יכול לשחרר אותו.
&nbsp
בפועל, התוצאה היא אותה תוצאה - התוכנה לא תמשיך לשום מקום.
&nbsp
ושיהיו בריאים המרצים שלכם!
אם "תת תהליך" עוד אפשר להבין, בחיים לא הייתי מנחש מה עושה פה "חבק" בלי הסבר שלך!
 

white shadow 3

New member


האם השורה השניה שכתבת "תיאורטית, מישהו אחר יכול לשחרר אותו" תקפה גם אם נתון (בשאלה) שמובטח שיש אך ורק 2 threads שקיימים ושום דבר אחר לא רץ? (שזה הנתון בשאלה..)

ושאלת המשך: אם היה נתון שיש n threads אבל כל אחד מהם צריך לחכות לthread הקודם לו שיסיים את התהליך ורק אז יוכל לבצע את f (כלומר תהליך 2 מחכה ל-1, תהליך 3 מחכה ל-2, תהליך 4 מחכה ל-3 וכו'..)
ואז הגענו למצב שתהליך 1 תקוע..
פורמלית זה עדיין לא נכלל תחת הקטגרויה של deadlock?
 

BravoMan

Active member
מן הסתם אם אין עוד תת תהליכים בתוכנה

זה לא יקרה, זו גם הסיבה שכתבתי שבפועל התוכנה תקוע בדיוק כמו ב-deadlock.
&nbsp
אגב, אתה מודע לכך שכמו שפונקציה main היא עוד פונקציה, כך התת תהליך שהיא רצה בו הוא עוד תת תהליך לכל דבר ועניין? (בד"כ מכנים אותו main thread כי הוא הראשון והראשי, והרבה פעמים היחיד).
&nbsp
למעשה, לצורך הסיפור שלך, לא ממש משנה אם קיים thread נוסף לראשי או לא.
פשוט תקעת את התוכנה עם לולאה אין סופית, זה הכל. לא ממש deadlock, אבל עדיין תקוע.
&nbsp
לגבי השאלה השנייה, מה שאני אומר לך, לקוח מהגדרה שיש בוויקיפדיה.
ייתכן שיש ספרים שמגדירים את זה אחרת, אבל deadlock הוא תלות הדדית בין שני תהליכים.
&nbsp
כך ששרשרת שתיארת לא מתאימה להגדרה הפורמלית, לא משנה מה אורכה.
רק עם thread 1 ימתין ל-thread n במקום להסתובב ב-while עם true, אפשר יהיה לומר שיש פה deadlock.
 

bismark1

New member
מעניין - נראה שהתרגום הנפוץ הוא "קיפאון"

שלחתי שאלה לאקדמיה ללשון עברית, אעדכן כשתהיה תשובה.
 

bismark1

New member
טוב, אז עפ"י הקדמיה ללשון "קיפאון" זה המונח הרשמי.

 

BravoMan

Active member
טוב לדעת...

הם לא תמיד מאשרים תרגומים הכי שפויים, אבל הפעם יצאו בסדר.
&nbsp
אישית, אני תמיד מעדיף להיצמד למונחים אנגליים ולספרות האנגלית כשזה נוגע למחשבים. זה פשוט טבעי יותר...
&nbsp
נשאיר אוגרים ודלגלגים לפינת החי
 

bismark1

New member
זה כלום, על הדרך גיליתי שאינטגרל בעברית זה "אסכמת" (כ דגושה)

 
למעלה