考虑以下代码
//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/