保持等待与循环等待有何不同?

How hold and wait is different from circular wait?

我无法弄清楚死锁的两个条件有何不同。等待看起来像是循环等待的一个子集。

Hold and Wait 和 Circular Wait 是发生死锁时满足的条件。

这意味着如果不满足这两个条件,你就不会陷入死锁。

保持和等待条件表明进程正在保持 resource/s 其他进程可能需要(也可能不需要)。这里的关键点是进程持有这些资源并且在它获得请求的资源(被其他进程持有)之前不会释放它们。

循环等待条件表明存在一个进程链,其中每个进程都在等待另一个进程持有的资源。在这种情况下,这并不一定意味着该进程正在占用另一个进程正在请求的资源,而是所有进程都在等待另一个进程正在占用的资源。

有关详细信息,请参阅这些文章:

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

对于 Hold And Wait,必须存在一个进程持有已分配给它的资源,同时等待其他进程当前持有的额外资源。然而,对于循环等待的发生系统中的进程形成一个循环列表或链,其中列表中的每个进程都在等待列表中下一个进程持有的资源。

需要注意的一点:Circular Wait必须形成链(Circular list),而Hold and Wait则不是。

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