如何将“阻塞等待”和“循环等待”区分开来?

7

我无法弄清两种死锁条件之间的区别。持有和等待看起来像是循环等待的一个子集。


1
在我看来,循环等待是“持有和等待”的子集!! - Anurag Singh
2个回答

10

持有并等待循环等待是死锁发生时遇到的条件。

这意味着,如果这两个条件中的任何一个不满足,就不会出现死锁。

持有并等待条件说明进程正在持有可能(或可能不)被其他进程需要的资源。关键点在于该进程正在持有这些资源,并且在获得所请求的资源(其他进程持有的资源)之前将不会释放它们。

循环等待条件说明存在一系列进程,每个进程都在等待另一个进程持有的资源。在这种情况下,不一定是进程持有其他进程请求的资源,而是所有进程都在等待另一个进程持有的资源。

有关更多信息,请参见以下文章:

http://www.cs.yale.edu/homes/aspnes/pinewiki/Deadlock.html http://nob.cs.ucdavis.edu/classes/ecs150-1999-02/dl-cond.html


3
你能举一个例子,其中“循环等待”条件为真,但“持有并等待”条件为假吗? - Elliott
如链接文章(http://www.cs.yale.edu/homes/aspnes/pinewiki/Deadlock.html)所述,循环等待意味着持有并等待(因此没有这样的例子)。 - jacob

1
对于“持有并等待”,必须存在一个进程正在持有已分配给它的资源,同时等待其他进程当前持有的附加资源。而对于循环等待来说,系统中的进程形成一个循环列表或链,列表中的每个进程都在等待下一个进程持有的资源。
需要注意的是:循环等待的链(循环列表)的形成是必须的,而这不是“持有并等待”的情况。

Reference: http://www.personal.kent.edu/~rmuhamma/OpSystems/Myos/deadlockCondition.htm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接