Threads Flashcards
בספרייה pthread כיצד יוצרים חוט חדש?
בעזרת pthread_create
מה עושה הפונ’ pthread_self?
מחזירה לחוט הקורא את המזהה של עצמו. מזהה זה הוא פנימי לספרייה pthreads ואינו קשור ל-PID של החוט.
מה עושה: void pthread_exit(void *retval);
מסיימת את פעולת החוט הקורא. ערך הסיום יוחזר לחוט שימתין לסיום חוט זה.
מה עושה int pthread_cancel(pthread_t thread);?
מסיימת את ביצוע החוט thread בעזרת סיגנל ייעודי.
ערך סיום הביצוע של החוט שנהרג יהיה PTHREAD_CANCELED.
מה עושה? int pthread_join(pthread_t thread, void **thread_return)
גורמת לחוט הקורא להמתין לסיום החוט המזוהה ע”י thread.
ניתן להמתין על סיום אותו חוט פעם אחת לכל היותר – ביצוע pthread_join() על אותו חוט יותר מפעם אחת ייכשל.
כל חוט יכול להמתין לסיום כל חוט אחר באותו תהליך.
ההמתנה על סיום החוט משחררת את מידע הניהול של החוט ברמת הספריה pthreads וברמת הגרעין.
בעזרת איזו קריאת מערכת הגרעין יוצר חוטים?
clone.
מהם חוטי גרעין?
תהליכים רגילים המשתפים ביניהם משאבים כגון זיכרון, גישה לקבצים וחומרה.
האם יש קשרי משפחה בין חוטים?
לא
לכל חוט, בהיותו תהליך רגיל, יש PCB משלו ו-PID משלו.
עם זאת, המתכנת מצפה שלכל החוטים השייכים לאותו תהליך ניתן יהיה להתייחס דרך PID יחיד – של התהליך המכיל אותם.
איך לינוקס תומכת בכך?
לינוקס מאחדת את כל החוטים של תהליך מסוים לקבוצת חוטים (thread group) כדי שאפשר יהיה להתייחס אליהם יחד.
השדה tgid במתאר התהליך מכיל את ה-PID המשותף לכל החוטים באותה קבוצה.
למעשה, זהו ערך ה-PID של החוט הראשון (הראשי) של התהליך.
חוטים חדשים יקבלו ערך PID חדש וערך TGID זהה לחוט הראשון.
קריאת המערכת getpid() מחזירה למעשה את currenttgid.
מה עושה קריאת המערכת clone?
יוצרת תהליך בן המשתף עם תהליך האב משאבים ונתונים לפי בחירה.
איזו מחסנית משותפת כאשר קוראים לclone?
משתמש. clone נקראת מתהליך משתמש ואסור לתת לה גישה למחסנית הגרעין.
מה ההבדל בין mutex_lock ל-mutex_trylock?
trylock לא חוסמת אם המנעול כבר תפוס היא פשוט נכשלת.