我有一个关于 Dijkstra 银行家算法问题的答案的问题(问题在下面的屏幕截图中提供)。
我认为这个问题的答案应该是“是的,有可能做到”。我的想法是,一旦用户 1 完成,我们可以将他弹出并释放他请求的资源(10 个 A 和 5 个 B),并将他使用的资源返回到可用资源池,这将帮助其他人完成。
相反,答案(在问题下方的屏幕截图中)表明这是不可能的。我哪里做错了?为什么这是不可能的答案?
回答:
我有一个关于 Dijkstra 银行家算法问题的答案的问题(问题在下面的屏幕截图中提供)。
我认为这个问题的答案应该是“是的,有可能做到”。我的想法是,一旦用户 1 完成,我们可以将他弹出并释放他请求的资源(10 个 A 和 5 个 B),并将他使用的资源返回到可用资源池,这将帮助其他人完成。
相反,答案(在问题下方的屏幕截图中)表明这是不可能的。我哪里做错了?为什么这是不可能的答案?
回答:
我认为这只是一个措辞不佳的问题。问题描述指出可用资源是A = 10
和B = 15
。
在银行家的算法中,如果一个进程可以分配它需要的最大资源,它就被认为是“安全的”。(过程 1 需要 10 个 A 和 5 个 B)
然后答案表明可用资源是A = 1
和B = 2
。如果查看当前分配的所有进程号:
进程 1 有 2 个资源
进程 2 有 3 个资源
进程 3 有 2 个资源
进程 4 有 2 个资源
--------------- ------------
使用中的总 A 资源 = 9
很明显,这个问题意味着这些是整个系统资源,而不是当前可用的资源。因此 9 A 资源正在使用中,进程 1 最多需要 10 个(它有 2 个),所以它还需要 8 个;在这种情况下,答案是否定的,这是不安全的。