multithreading - 'critical section algorithm' 中的进度和有限等待是什么?

标签 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>

我确定上面的代码将满足互斥属性,但我不确定以下内容
  • progress 到底是什么意思?并且上面的代码是否满足它,上面的代码要求严格交替执行临界区。这被认为是 progress 吗?
  • 从我看到的上面的代码没有维护任何关于进程进入临界区的次数的信息,这是否意味着上面的代码不满足 bounded waiting
  • 最佳答案

    Progress 意味着该进程最终会做一些工作 - 一个可能不是这种情况的例子是低优先级线程可能被高优先级线程抢占和回滚。一旦您的流程到达它们的临界区,它们就不会被抢占,因此它们会取得进展。
    Bounded waiting 意味着该进程最终将获得处理器的控制权 - 可能不是这种情况的一个例子是当另一个进程在临界区有一个非终止循环而线程不可能被中断时。如果临界区终止并且剩余部分不会重新调用进程的临界区(否则一个进程可能会继续运行其临界区,而另一个进程从未获得对处理器的控制),则您的代码有界等待。

    关于multithreading - 'critical section algorithm' 中的进度和有限等待是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962097/

    相关文章:

    android - 有没有更好的方法可以在协程中设置n次监听器?

    operating-system - MS Windows 有什么样的内核?

    linux - linux内核如何创建sysfs?

    java - 多线程修改StringBuilder

    android - Schedulers.io() 不返回主线程

    java - 多线程: Multiple threads interacting with same table

    java - 多线程

    ios - Firebase 离线 iOS : How to keep in sync reliably?

    c - 尝试将整数参数传递给线程

    linux - rbp/ebp(x86-64) 寄存器是否仍按常规方式使用?