死锁和互斥

deadlock and mutual exclusion

两个进程X和Y需要访问临界区。考虑两个进程使用的以下同步结构。

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

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

1.The 提出的解决方案可以防止死锁但不能保证互斥

2.The提出的解决方案保证互斥但不能防止死锁

3.The提出的方案保证互斥,防止死锁

4.The提出的解决方案未能防止死锁且未能保证互斥

根据问题setter第4个答案是正确答案。

我发现它不能保证互斥,但它如何不能防止死锁?

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

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

现在,如果进程 X 试图进入临界状态,Section.It 将永远无法进入,除非进程 Y 也尝试 enter.Reason 作为条件,而 (varQ == true) 将保持为假,除非进程 Y 试图进入进入临界区并在这样做时将 VarQ 设置为 true,在离开临界区 (CS) 之前它已设置为 false。

所以我们可以看到,如果进程 Y 不尝试进入 CS,进程 X 将被无限期地阻止,并且关键部分也未被使用。

但问题仍然存在,缺乏饥饿自由度如何导致缺乏死锁freedom.In死锁每个进程都被阻塞,但如果进程Y确实再次尝试进入CS,进程X可能已经成功试图进入 CS。