什么是“临界区算法”中的进展和有限等待?

时间:2014-09-21 17:44:32

标签: multithreading operating-system synchronization semaphore

考虑以下代码

  //proces i:                             //proces j:

  flag[i] = true;                         flag[j] = true;
  turn = j;                               turn = i;
  while(flag[j] == true && turn==j);       while(flag[i] == true && turn == i);

  <critical section>                      <critical section>

  flag[i] = false;                        flag[j] = false;

  <remainder section                      <remainder section>

我确信上面的代码会满足互斥属性,但我对以下内容不确定

  1. progress究竟是什么意思?并且上述代码是否满足它,上述代码要求严格交替执行临界区。是否被视为progress

  2. 从我看到上面的代码中没有维护进程进入临界区的次数的任何信息,这是否意味着上述代码不满足bounded waiting

2 个答案:

答案 0 :(得分:7)

Progress意味着该进程最终会做一些工作 - 这可能不是这种情况的一个示例,即低优先级线程可能被高优先级线程抢占并回滚。一旦您的流程到达他们的关键部分,他们就不会被抢占,所以他们会取得进步。

Bounded waiting意味着该进程最终将获得对处理器的控制 - 这可能不是这种情况的一个示例是当另一个进程在临界区中具有非终止循环而没有该线程的可能性时被打断了如果关键部分终止,你的代码就会等待,而余数部分不会重新调用进程的关键部分(否则进程可能会继续运行其关键部分而其他进程无法控制处理器)。

答案 1 :(得分:6)

  1. 进程的进展意味着进程不会进入死锁状态,因此,它们的执行会独立进行!实际上,在任何时刻,只有一个进程i或进程j将执行其关键段代码,因此,将保持一致性!所以,在给定的代码中,两个过程的进展都得到了成功的讨论和成功。

  2. 接下来,此特定代码适用于仅运行一次的进程,因此,它们不会再次到达其临界区代码。它是单个执行过程。

  3.   

    有界等待说必须存在一定数量的界限   允许其他进程进入其关键部分   在一个进程请求进入其关键部分之后   在该请求被授予之前。

    这段特殊的代码与有界等待无关,而且只是处理执行一次的琐碎事例!