资源分配图算法如何防止死锁?



根据操作系统概念书,资源分配图算法可以防止死锁,如下所示:

如果我们有以下分配图 https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/images/Chapter7/7_07_DeadlockAvoidance.jpg

P1 尝试分配资源 R2,系统会阻止它并使其等待,因为这会导致不安全状态。

我的问题如图所示,P2 正在等待 P1 释放 R1,而 P1 现在正在等待分配 R2,这会导致死锁。这种算法如何防止这种类型的死锁?

我没有你的书的副本,但我怀疑有错别字。这个想法是将错误(EDEADLOCK(返回到将完成循环的资源分配请求;从而检测挂起的死锁,而不是主动避免它。对于请求失败的过程,它仍然取决于采取一些纠正措施的过程,例如放弃所有资源并尝试重新获取它们。

如果将资源替换为信号量或互斥锁,则应该清楚的是,等待无济于事。

为了主动避免死锁,你几乎需要使用信号量集——即在一个地方获取特定代码路径需要的所有锁(参见系统 V 信号量(——或者安排你的代码使用特定的锁顺序。 后者的一个例子是通过增加地址来分配锁,因此所有参与者都将尝试以相同的顺序进行分配。 对于细粒度的通用代码来说,两者都不实用,但对于事务处理应用程序来说却是可能的。

最新更新