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问题的解决方案是无死锁的。解决方案是免费的。
三。进程按FIFO顺序进入CS。
IV多个进程可以同时进入CS。
以上哪项陈述是正确的?
正确答案作为选项I给出。
虽然I和IV选项对我来说很清楚,但我无法理解饥饿是如何在这里实现的。
如果有人能帮我解释,那就太好了。感谢。
答案 0 :(得分:1)
当一个进程在此while
方法中执行enter_CS
循环时,它会在每个调用之间以一段时间间隔调用test-and-set
方法。 (此时间间隔可能取决于操作系统如何安排每个进程使用CPU)
假设当process_1已经在临界区内时,process_0开始执行while
循环。如果process_1始终退出并在此时间间隔内进入临界区,则process_0将永远不会成功输入cs。 (当等待一个关键部分的进程数量很大时,情况会变得更糟)
Peterson Algorithm提供了一个标记' turn
以避免这种饥饿情况。
答案 1 :(得分:0)
上面的代码保证如果多个进程试图获取锁,其中一个将获得锁。获取锁定并不取决于进程的到来。考虑一种情况,当总有两个以上的进程尝试获取锁时,无法保证特定进程最终会获得锁。我希望你能清楚地了解以FIFO顺序进行的收购。