僵局和相互排斥

时间:2015-03-01 09:28:34

标签: deadlock mutual-exclusion

两个进程X和Y需要访问关键部分。考虑两个进程使用的以下同步构造。

http://d18khu5s3lkxd9.cloudfront.net//wp-content/uploads/2015/02/Q20.png

在上面给出的链接中,  varP和varQ是共享变量,两者都初始化为false。以下哪一项陈述是正确的?

1.建议的解决方案可防止死锁但无法保证互斥

2.建议的解决方案保证互斥,但无法防止死锁

3.建议的解决方案保证互斥并防止死锁

4.建议的解决方案未能防止死锁并且无法保证互斥

根据问题设定者,第4个答案是正确答案。

我认为它无法保证相互排斥,但它如何无法防止死锁?

1 个答案:

答案 0 :(得分:0)

在仔细研究算法之后我想出了这个。

假设进程Y使用了Critical Section。因此,它必须将VarQ变量设置为false。

现在,如果Process X尝试输入Critical Section.It永远不能进入,除非进程Y也尝试进入。条件是条件,而(varQ == true)将保持为假,除非进程Y尝试进入Critical Section并且正在进行所以将VarQ设置为true,在离开Critical Section(CS)之前它已设置为false。

因此,我们可以看到进程Y是否没有尝试进入CS,进程X被无限期阻止,并且临界区也未被使用。

但问题仍然存在,如何缺乏饥饿自由导致缺乏死锁自由。在僵局中,每个进程都被阻止,但如果进程Y确实试图再次进入CS,则进程X本可以成功尝试进入CS。