作者supergud (小胖)
看板Grad-ProbAsk
标题Re: [理工] [os]-交大98-资联
时间Fri Jan 8 15:37:17 2010
※ 引述《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