测试和设置指令中的饥饿

问题描述 投票:0回答:2

GATE考试中询问了以下问题: 使用test-and-set指令实现enter_CS()和leave_CS()函数来实现进程的关键部分,如下所示:

void enter_CS(X)
{
    while test-and-set(X) ;
}
void leave_CS(X)
{
   X = 0;
}

在上面的解决方案中,X是与CS关联的内存位置,并初始化为0.现在考虑以下语句: I.上述CS问题的解决方案是无死锁的 II。解决方案是免费的。 III。进程按FIFO顺序进入CS。 IV多个进程可以同时进入CS。 以上哪项陈述是正确的? 正确答案作为选项I给出。 虽然I和IV选项对我来说很清楚,但我无法理解饥饿是如何在这里实现的。 如果有人可以帮我解释一下那会很棒。谢谢。

concurrency operating-system semaphore binary-semaphore
2个回答
1
投票

当一个进程在这个while方法中执行enter_CS循环时,它会一直调用test-and-set方法,每个调用之间有一个时间间隔。 (此时间间隔可能取决于操作系统如何安排每个进程使用CPU)

假设当process_1已经在临界区内时,process_0开始执行while循环。如果process_1始终退出并在此时间间隔内进入临界区,则process_0将永远不会成功输入cs。 (当等待一个关键部分的进程数量巨大时,情况会变得更糟)


Peterson Algorithm提供“旗帜”turn以避免这种饥饿情况。


0
投票

上面的代码保证如果多个进程试图获取锁,其中一个将获得锁。获取锁定并不取决于进程的到来。考虑一种情况,当总有两个以上的进程尝试获取锁时,无法保证特定进程最终会获得锁。我希望你能清楚地了解以FIFO顺序进行的收购。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.