记总进程数为 n,总资源数为 m,每个进程所需的最大资源数为 w。
如果 n * (w-1) <= m 则不会发生死锁,否则会发生死锁.
案例一:
具体来看,假如 n = 2,m = 3,w = 2,根据上述式子,该系统不会发生死锁。
在某一时刻,两个进程同时发出资源请求,且每个进程请求的个数为 w - 1,也就是 1 个资源,此时所有进程的都还缺少一个资源才能结束进程并释放自己的资源,考察目前已经消耗的资源数以及系统剩余的资源数,分别为 2 和 1,这时将这个剩余的资源分配给上述两个进程的任意一个,假如分配给进程 P1,该进程获得了所需的资源,于是释放它被分配的资源,此时系统资源总数为 2,这时,将这两个资源的其中 1 个资源分配给另一个正在等待的进程 P2,该进程得以释放,同时所有的进程都得到满足。
案例二:
再来看一个例子,假如 n = 3,m = 3,w = 2,根据上述式子,该系统可能会发生死锁。
在某一时刻,三个进程同时发出资源请求,每个进程请求资源个数为 w - 1,即 1 个资源,此时消耗的总资源数为 n * 1 = 3 * 1 = 3 个资源,剩余资源数为 m - 3 = 3 - 3 = 0,在这一时刻,所有进程都在等待,并且这种等待行为不会结束,因为没有一个进程会提前结束并释放出自己的资源供其他进程使用,即进入了死锁状态。
课后练习:
标签:每个,数为,死锁,进程,资源,请求 From: https://www.cnblogs.com/gaotianchi/p/18152209/determine-whether-a-deadlock-will-occur-in-t