KonkurStudy

سوال ۱۰۴ کنکور ارشد مهندسی کامپیوتر ۱۴۰۰

اهمیت
۰/۵

الگوریتم زیر یک راه‌حل پیشنهادی نرم‌افزاری برای حل مسئلهٔ ناحیهٔ بحرانی (Critical-Problem) در نظر بگیرید. در حالی که تنها دو پردازهٔ P0P_0 و P1P_1 وجود داشته باشند، متغیرهای flag (آرایه) و turn این دو پردازه مشترک هستند:

boolean flag[2];  /* initially false */
int turn;

با فرض ساختار پردازهٔ PiP_i به‌صورت زیر (با i=0i = 0 و j=1j = 1) باشد، کدام گزینه صحیح است؟

do {
    flag[i] = true;
    while (flag[j]) {
        if (turn == j) {
            flag[i] = false;
            while (turn == j)
                ; /* do nothing */
            flag[i] = true;
        }
    }
    /* critical section */
    turn = j;
    flag[i] = false;
    /* remainder section */
} while (true);
#mutual-exclusion#dekkers-algorithm#critical-section#bounded-waiting#progress#busy-waiting