C 以下伪代码是否具有互斥性、无限期延迟性、两者都没有或两者都有?

C 以下伪代码是否具有互斥性、无限期延迟性、两者都没有或两者都有?,c,process,semaphore,critical-section,mutual-exclusion,C,Process,Semaphore,Critical Section,Mutual Exclusion,对于以下内容,我想知道在以下情况下会发生什么: //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

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

//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在(in2)循环时无法越过其入口协议的
    ,并且在(de)中被有限地延迟

互斥是操作系统提供的一种功能-因此,不,它不是。在我看来,它除了数据争用和未定义的行为之外什么都没有。要实现互斥,请使用mutex()功能,对两个关键代码段使用相同的互斥名称。否则,正如@R所提到的,结果将是数据竞争和未定义的行为。