שאלות על Threadים
שלום, סיימתי תואר במדעי המחשב ומשום מה לא למדנו על threadים. אחרי שנפלתי בשתי ראיונות בגלל שלא ידעתי כל כך איך להשתמש בזה, החלטתי ללמוד מה זה. 1) בטכניון כן למדתי על סמפור ו multi procces, זה מקביל ל multi thread? 2) אם אפשר, לקבל קישור על העקרונות של זה? (הסבר כללי, לא "מולטי thread ב java/c"). 3) אם אפשר, לקבל פתרון לשאלות הבאות (אלה השאלות שנפלתי עליהם): I) יש hash table שהרבה קליינטים יכולים לגשת אליה. כל אחד מבצע את הדבר הבא: 1) find key 2) אם key לא נמצא add key . כאשר הפעולה add יקרה, ו find זולה. (הבעייה כמובן היא שלא יקראו ל add אם אותו key בו זמנית) אפשר לשנות/להוסיף לקוד. צריך להשתמש במשתנים מסוג lock שאפשר לעשות להם lock=1 או lock=0 בפעולה אטומית. הפתרון שלי היה להגדיר N משתנים מסוג lock כש N זה גודל הטבלה. ולקרוא ל lock ל L[key] בין שורה 1 ל 2 ואח"כ לשחרר אותו. אבל לפתרון יותר טוב לא הצלחתי להגיע. 2) מימוש של socket. יש n אפליקציות, ויש buffer אחד שמקבל הודעות. כל אפליקציה קוראת ל receive, ורק ברגע שיש הודעה בשבילה receive צריכה להסתיים. (receive מקבלת בתור פרמטר את מספר האפליקציה). כאשר ה buffer מקבל הודעה מופעלת פונקציה rec_, שגם אותה צריך לממש. שוב הפתרון שלי היה ליצור n לוקים (locks(, שהמצב ההתחלתי שלהם נעול. receive תקרא לlock של מספר האפליקציה, rec_ תשחרר אותו. שוב אמרו לי שיש פתרון יותר טוב ולא הגעתי אליו. למישהו יש תשובות?
שלום, סיימתי תואר במדעי המחשב ומשום מה לא למדנו על threadים. אחרי שנפלתי בשתי ראיונות בגלל שלא ידעתי כל כך איך להשתמש בזה, החלטתי ללמוד מה זה. 1) בטכניון כן למדתי על סמפור ו multi procces, זה מקביל ל multi thread? 2) אם אפשר, לקבל קישור על העקרונות של זה? (הסבר כללי, לא "מולטי thread ב java/c"). 3) אם אפשר, לקבל פתרון לשאלות הבאות (אלה השאלות שנפלתי עליהם): I) יש hash table שהרבה קליינטים יכולים לגשת אליה. כל אחד מבצע את הדבר הבא: 1) find key 2) אם key לא נמצא add key . כאשר הפעולה add יקרה, ו find זולה. (הבעייה כמובן היא שלא יקראו ל add אם אותו key בו זמנית) אפשר לשנות/להוסיף לקוד. צריך להשתמש במשתנים מסוג lock שאפשר לעשות להם lock=1 או lock=0 בפעולה אטומית. הפתרון שלי היה להגדיר N משתנים מסוג lock כש N זה גודל הטבלה. ולקרוא ל lock ל L[key] בין שורה 1 ל 2 ואח"כ לשחרר אותו. אבל לפתרון יותר טוב לא הצלחתי להגיע. 2) מימוש של socket. יש n אפליקציות, ויש buffer אחד שמקבל הודעות. כל אפליקציה קוראת ל receive, ורק ברגע שיש הודעה בשבילה receive צריכה להסתיים. (receive מקבלת בתור פרמטר את מספר האפליקציה). כאשר ה buffer מקבל הודעה מופעלת פונקציה rec_, שגם אותה צריך לממש. שוב הפתרון שלי היה ליצור n לוקים (locks(, שהמצב ההתחלתי שלהם נעול. receive תקרא לlock של מספר האפליקציה, rec_ תשחרר אותו. שוב אמרו לי שיש פתרון יותר טוב ולא הגעתי אליו. למישהו יש תשובות?