有兩個執行程序以多工排程的方法同時執行。兩個執行程序分享3個變數:a、flag[1]和flag[2]。其他變數則不共用。對第一個執行程序i=1,j=2。對第二個執行程序i=2,j=1。
a = 0;
flag[i] = true;
while flag[j] do no-op;
a = a + i;
flag[i] = false;
對於以上程式,那一個是不可能的結果?
Aa = 0正確答案
Ba = 1
Ca = 2
D程式無法停止
答案與詳解
A
正確答案
只要程式正常結束,最後執行的 a = a + i 必使 a 為 1 或 2,故 a = 0 為不可能之結果。
逐選項解析
Aa = 0✓ 正確
題目詢問不可能的結果。程式若正常結束,最後一個執行 a = a + i 的執行程序必會將 a 加上 1 或 2,因此 a 的最終值不可能為 0,符合題意。
Ba = 1✕ 錯誤
此選項描述的是可能發生的結果。若執行程序 2 先執行完畢,接著執行程序 1 執行 a = 0 後再執行 a = a + 1,最終 a 的值即為 1,與題目要求的不可能結果不符。