两个进程X和Y需要访问关键部分。考虑两个进程使用的以下同步构造。
http://d18khu5s3lkxd9.cloudfront.net//wp-content/uploads/2015/02/Q20.png
在上面给出的链接中, varP和varQ是共享变量,两者都初始化为false。以下哪一项陈述是正确的?
1.建议的解决方案可防止死锁但无法保证互斥
2.建议的解决方案保证互斥,但无法防止死锁
3.建议的解决方案保证互斥并防止死锁
4.建议的解决方案未能防止死锁并且无法保证互斥
根据问题设定者,第4个答案是正确答案。
我认为它无法保证相互排斥,但它如何无法防止死锁?
答案 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。