【问题标题】:Does the following pseudocode have mutual exclusion, indefinite postponement, neither or both?下面的伪代码是否有互斥、无限期推迟、两者都没有或两者都有?
【发布时间】:2014-11-29 16:40:42
【问题描述】:

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

//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;
}

目前对此有点困惑,因为我认为它只是缺乏互斥-但只是想确定一下!

【问题讨论】:

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

标签: c process semaphore critical-section mutual-exclusion


【解决方案1】:

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

  • 从最初的in2=false 开始,P1 克服了它的入口协议并进入了临界区。
  • 如果 P2 执行然后,由于仍然是 in1=false,P2 越过它的入口协议,也进入临界区,因此没有互斥。

关于无限期延期:

  • 在 P2 执行 in2=true 之后,in2 永远不会再次设置为 false
  • 因此,P1 无法克服其入口协议的 while(in2) 循环,并被无限期推迟。

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多