看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《b76516 (阿聰)》之銘言: : 請問一下98交大資訊聯招作業系統 : 第16題 : 程式碼如下 : void *process(int i){ : int j ; : do{ : if(i==0) : j=1; : else : j=0; : flag[i]=true; : while(flag[j]); : c.s : flag[i]=false; : r.s : } : while(true);} : 這題答案說會違反 progress條件 : 因為可能會造成死結 : 請問一下什麼情況下會發生死結呢? : 還有為什麼能達到Bounded waiting 條件呢? : 謝謝 T1;flag[i]=true; T2;flag[j]=true; T3;while(flag[j]) do no-op;//Pi等 T4;while(flag[i]) do no-op;//Pj等 產生死結 Bounded waiting Pi正在CS中Pj正在等待 此時flag[j]=true 當Pi離開CS則會把flag[i]設為false 此時Pj就可進入CS 至多等一次即可進入 如果此時Pi搶先做到flag[i]=true 也會被while loop擋住 發生死結 所以Pi不會先於Pj再度進入CS Bounded waiting成立 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.72.64.202