对于作业分配,我负责在Java中实现Banker算法。Java Banker算法,找到安全序列
我想写一个函数,将确定是否资源(作为参数传递)的请求将导致安全状态,因此,可接受与否。
因此,对于每个请求,我模拟接受它,通过添加请求线程的资源总量,并从银行资源中拿走很多。
为了确定我是否处于安全状态,我遍历了其他线程,并检查了我是否理论上可以给他们足够的资源来完成,并且在他们“完成”之后,我收回他们的资源到银行,然后转到下一个资源,看看我是否无法处理它。如果我不能,我跳过它并检查下一个,然后我可能会重新访问最后一个。最终,我将有一个序列,我可以授予我正确的资源。
所以说我有螺纹:0 1 2 3 4 但安全序列可能类似于4 3 2 1(最坏情况)
我可以使用什么样的数据结构,这将让我不断迭代,直到我确定至少有一个安全序列?
它的工作是这样的:
Iteration1:0 1 2 3倍4
迭代2:0 1X 2 4
Iteration3:0X 2 4
Iteration4:2×4
迭代5:4x
因此,安全的顺序是:3,1,0,2,4 因此,当我迭代时,由于我每次“弹出”其中一个进程时该集合越来越小,因为我知道算法可以安全地选择下一个。
为什么你不能只使用2d数组? – cjds
,因为一旦我重复了一次,我就完成了。 –