对于以下内容,我想知道在以下情况下会发生什么:
//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)
循环,因此会无限期地延迟。