otherside3
New member
multi-threading
שלום לכולם.
שאלה שנתקלתי בה במבחן מאוניברסיטה בחו"ל ואני לא בטוח אם אני מבין את התשובה.
בשאלה עצמה נתון קטע main ואחריו 3 מימושים לפונקציה, כאשר נתון בפתיח של השאלה:
You may assume, for the purposes of this problem, that printf executes atomically
השאלה שלי מתייחסת רק לאחד המימושים, לכן אביא רק אותו
השאלה: מבין האפשריות הבאות, לפחות אחת אינה יכולה להיות פלט חוקי של התוכנית. ציין מהו/ה הפלט.
1 2 3
3 3 3
1 3 1
1 1 1
ע"פ התשובות של המבחן, רק פלט 3 (131) אינו יכול להיות חוקי.
אני מבין למה פלט 2 ופלט 4 חוקיים, ואני מבין למה פלט 3 לא חוקי, אך אני לא מבין לגבי פלט 1 הוא חוקי. ניסיתי למצוא סדרת פעולות שיביאו אותי לתוצאה הזאת, ונראה שמצאתי אבל היא לא מקיימת את ההנחה שבתחילת השאלה ש-printf היא אטומית (כלומר, אם אני מבין נכון את המשמעות של זה, היא גם קוראת את הערך של i וגם מדפיסה אותו למסך בפעולה אחת ולא מבצעת
context switch באמצע)
האם יש טעות בפתרון? או האם יש כאן משהו שאני לא רואה נכון?
תודה!
שלום לכולם.
שאלה שנתקלתי בה במבחן מאוניברסיטה בחו"ל ואני לא בטוח אם אני מבין את התשובה.
בשאלה עצמה נתון קטע main ואחריו 3 מימושים לפונקציה, כאשר נתון בפתיח של השאלה:
You may assume, for the purposes of this problem, that printf executes atomically
השאלה שלי מתייחסת רק לאחד המימושים, לכן אביא רק אותו
קוד:
sem_t sem;
int i = 0;
void *doit(void *arg)
{
i = i + 1;
printf("%d\n", i);
}
int main()
{
int j;
pthread_t tids[3];
sem_init(&sem, 0, 1);
for (j=0; j<3; j++) {
pthread_create(&tids[j], NULL, doit, NULL);
}
for (j=0; j<3; j++) {
pthread_join(&tids[j], NULL);
}
return 0;
}
השאלה: מבין האפשריות הבאות, לפחות אחת אינה יכולה להיות פלט חוקי של התוכנית. ציין מהו/ה הפלט.
1 2 3
3 3 3
1 3 1
1 1 1
ע"פ התשובות של המבחן, רק פלט 3 (131) אינו יכול להיות חוקי.
אני מבין למה פלט 2 ופלט 4 חוקיים, ואני מבין למה פלט 3 לא חוקי, אך אני לא מבין לגבי פלט 1 הוא חוקי. ניסיתי למצוא סדרת פעולות שיביאו אותי לתוצאה הזאת, ונראה שמצאתי אבל היא לא מקיימת את ההנחה שבתחילת השאלה ש-printf היא אטומית (כלומר, אם אני מבין נכון את המשמעות של זה, היא גם קוראת את הערך של i וגם מדפיסה אותו למסך בפעולה אחת ולא מבצעת
context switch באמצע)
האם יש טעות בפתרון? או האם יש כאן משהו שאני לא רואה נכון?
תודה!