※ 引述《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