求银行家算法解题过程程

呵呵,我大学时做过这道例题,刚刚找了一下找出来了,C版的,其实不复杂

贴出一段,基本算法都在里面,改成D版的不会难吧:)

int flag; /*测试死锁时进程可以分配的标志位*/

}zy[Max_Jc]; /*用记录数组记录进程数据,根据宏定义可任意扩展*/

int flag; /*测试标志位,测试一轮后为0则表明无法再分配资源*/

你好,不好意思。我的C不好。能否帮忙转到delphi,谢谢。

}

本篇博文为追忆曾经写过的算法系列第二篇()

目的具有代表性的死锁避免算法是Dijskstra给出的银行家算法。本实验是基于银行家算法的思想通过编写C++程序实现银行家算法的计算机程序化,使其更实用。同时也加深了有关自愿申请、避免死锁等概念,体会避免死锁的实际实现过程与方法。

1.设定进程p对各类资源r合理的最大需求max及初值确定;2.设定系统提供资源初始状况allocation;3.设定每次某个进程对各类资源的申请表示need;4.编制C++程序,基于银行家算法思想,决定申请是否被允许。

假设有p个进程r类资源,则有如下数据结构:

设进程I提出请求request[r],则银行家算法按如下规则进行判断。

(3)系统试探分配资源,修改相关数据:

其中,pn指第pn行申请资源

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

(2)从进程集合中找到一个满足下述条件的进程,

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源:

(4)如所有的进程finish[p]=1,则表示安全;否则系统不安全。

// 避免死锁银行家算法的C++ 编程实现 // p 进程数,r 资源种类 //比较结果为m中的元素全大于n中的元素返回1,否则返回0 /*安全性检验函数*/ //b、c、d意义同上 /*申请进程后的安全性检验函数*/
}

嘿嘿,今晚心血来潮,在宿舍把银行家算法实现了。

主要的思想是 舍大取小,先满足小的,最后才满足大的。 // 进程运行状态标志 // version 2 采用动态分配数组,为了函数调用的方便,使用全局指针 // 检测此时的分配状态是否安全 (核心函数) // 所有进程状态置零 // 以第一类资源为基准,选取该资源需求量最小的进程 // 如果资源能够分配了,那么进程就能够运行结束,然后释放资源,这里需要回收资源 // 释放所有的内存空间 // 释放所有的内存空间
}

我要回帖

更多关于 银行家算法解题过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信