החברה ממוקמת בהוד השרון ותהליך הקבלה מורכב מ3 ראיונות. זו שאלה מהראיון הראשון עם ר"צ.
שאלות מתוך הראיון
We have 2 threads running the below for loop updating a global variable.
uint8 g_Global =0;
for(i=0; i<10; i++)
{
g_Global++;
}
How could the global variable could be equal to 2 in the end of the 2 threads run?
תשובות
הוסף תשובה
|
לצפיה בתשובות
יוני 2018
הthread הראשון קורא את g_Global לתוך רגיסטר שלו(ערך 0), מעלה אותו ב1 ולפני שמזין אותו בחזרה לg_Global מתרחש context switch והשליטה עוברת לthread השני.
הthread השני רץ עד 9(g_Global = 9) ואז שוב context switch.
הthread הראשון מזין את g_Global ב1 (דורס את הערך הקודם), ושוב השני חוזר לעבודה וקורא 1, מעלה אותו ל2 ולפני ושמזין.
הראשון חוזר לעבודה ורץ על שהוא מסיים את ה10 איטרציות שלו.
השני חוזר לעבודה עם פעולה אחרונה שהיא הזנה לg_Global ולכן הוא מזין 2 במשתנה.
ניתן למנוע זאת ע"י שימוש בsemapore או mutex