[算法]操作系统进程通信(预防死锁)算法 Dijkstra银行家算法 C语言实现

今天完成昨天的算法,银行家算法,这个大家如果知道操作系统这门课程的话应该会明白,昨天一直忙于复习,今天也是,不过下午还是完成了基本调试,调试环境GCC和TC,现在我把代码奉献给大家



银行家算法说明:最早由算法大师 迪杰克斯拉 (Edsger Dijkstra) 提出,银行家算法,顾名思义,它的原理来源于银行系统的存贷款发放管理,即银行(系统)要将一定的款项(资源)贷款(分配)给N个人(进程),当然不需要考虑信用问题< _>,在已经发放了一定的金额后,要使得银行的每一次放款(分配资源)都能使得银行(系统)的运行安全(预防死锁)(可以这么理解吧),因此银行家要对现有的资金进行合理分配发放,基本要求要银行必须保留一定的存款不能低于一定的限度(临界资源),同时又不能不放贷款不然会让客户“饿死”(进程饥饿),客户在使用完贷款后要返还(释放)这笔贷款,当然是没有利息的,然后银行要再分配给客户,直到满足客户的多有贷款请求





具体可以参照http://baike.baidu.com/view/93075.htm



代码如下:





/*

*银行家算法

*code CG 2008 01 05

*/



#include"stdio.h"



#define FALSE 0

#define TRUE 1

#define W 10

#define R 20

int M ; /*总进程数*/

int N ; /*资源种类*/



int ALL_RESOURCE[W];/*各种资源的数目总和*/

int MAX[W][R]; /*M个进程对N类资源最大资源需求量*/

int AVAILABLE[R]; /*系统可用资源数*/

int ALLOCATION[W][R]; /*M个进程已经得到N类资源的资源量*/

int NEED[W][R]; /*M个进程还需要N类资源的资源量*/

int REQUEST[R]; /*请求资源个数*/



/*

*函数名:output

*功能:输出资源分配情况

*/

void output()

{

int i,j;

printf("All Resource:n");

for(j = 0 ; j < N jbr>
printf("R%d:%dn", j , ALL_RESOURCE[j]);



printf("Resource Available:n");

for(j = 0 ; j < N jbr>
printf("R%d:%dn", j , AVAILABLE[j]);



printf("Process Resource Needed:n");



printf("| PID |");

for(j =
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值