测试和设置指令如何在下面的代码中提供有界等待?

时间:2016-10-03 09:58:50

标签: operating-system synchronization

在下面的代码中如何满足有界等待条件,我无法得到这些语句的用法,为什么他们应用条件j!= i和j =(j + 1)%n然后提到的条件在if子句中使用(j == i),请澄清一下,据我说它应该只检查等待[j],以确认是否有其他进程在等待锁定,我无法得到这个想法该算法的工作原理请解释一下。

while ((j != i) && !waiting[j]) 
            j = (j + 1) % n; 
        if (j == i) 
            lock = false; 

do {
    waiting[i] = true;
    while (waiting[i] && test_and_set(&lock)) ;
    waiting[i] = false;

    /* critical section */

    j = (i + 1) % n;
    while ((j != i) && !waiting[j]) 
        j = (j + 1) % n; 
    if (j == i) 
        lock = false; 
    else
        waiting[j] = false;

    /* remainder section */
} while (true);

1 个答案:

答案 0 :(得分:0)

有限等待表示没有进程应该等待无限时间的资源。

你有n个进程,进程i当前正在执行,当进入临界区时,它将等待设置为false。

现在,当流程i完成后会发生什么? 进程i将查找等待在关键部分运行的索引j(进程j)。换句话说,我们正在寻找一个等待进入与关键部分中运行的当前流程不同的关键部分的流程。

if (i==j),然后没有这样的进程,我们将lock设置为false。否则,我们设置等待运行的进程并防止饥饿。这样你就满足了Bounded Waiting。

这是因为你进行循环搜索,首先检查过程

i+1, i+2, .... n, 0, 1, ... ,(i-1)