对于以下内容,我想知道在以下情况下会发生什么:

//global declarations
Boolean in1=false, in2=false;
Process P1::
while(1){
  //entry protocol
  while(in2){
    in1=true;
  }
  //--critical section --
  //exit protocol
  in1=false;
}
Process P2::
while(1){
  //entry protocol
  in2=true;
  while(in1){
    in2=true;
  }
  //--critical section --
  //exit protocol
  in1=false;
}


目前,我对此感到有些困惑,因为我认为它缺乏互斥性-但只是想确保!

最佳答案

伪代码没有适当的互斥。考虑首先执行P1:


从最初in2=false开始,P1超过了其进入协议,进入了关键部分。
如果执行P2,则由于仍然是in1=false,因此P2会超过其进入协议并进入关键部分,因此不会相互排斥。


关于无限期推迟:


在P2执行in2=true之后,in2再也不会设置为false
因此,P1无法克服其进入协议的while(in2)循环,因此会无限期地延迟。

10-01 13:36