-
大小: 5KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-08
- 語(yǔ)言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
銀行家算法是一個(gè)避免死鎖的著名算法,它以銀行借貸系統(tǒng)的分配策略為基礎(chǔ),判斷并保證系統(tǒng)的安全運(yùn)行。
代碼片段和文件信息
#include??
#include??
#include
using?namespace?std;??
#define?MAX_PROCESS?100??
#define?MAX_RESOURCE?100??
int?Available[MAX_RESOURCE];????????????????????//可用資源數(shù)組????
int?Max[MAX_PROCESS][MAX_RESOURCE];????????????//最大需求矩陣????
int?Allocation[MAX_PROCESS][MAX_RESOURCE];????//分配矩陣???
int?Need[MAX_PROCESS][MAX_RESOURCE];?????//需求矩陣????
int?Request[MAX_PROCESS][MAX_RESOURCE];????????//進(jìn)程需要資源數(shù)???
int?p[MAX_PROCESS];?????????????????????????????//記錄序列??
int?nm;????????????????????????????????????//n個(gè)進(jìn)程m個(gè)資源????
void?Init()????????????????//初始化算法????
{????
????int?ij;????
????printf(“請(qǐng)輸入進(jìn)程的數(shù)目:\n“);??
????scanf(“%d“&n);???
????printf(“請(qǐng)輸入資源的種類:\n“);???
????scanf(“%d“&m);??
????printf(“請(qǐng)輸入每個(gè)進(jìn)程最多所需的各資源數(shù)按照%dx%d矩陣從左到右、從上到下輸入:\n“nm);????
????for(i=0;i ????{??
????????for(j=0;j ????????{??
????????????scanf(“%d“&Max[i][j]);??
????????}??
????}??
????printf(“請(qǐng)輸入每個(gè)進(jìn)程已分配的各資源數(shù)也按照%dx%d矩陣從左到右、從上到下輸入:\n“nm);????
????for(i=0;i ????{????
????????for(j=0;j ????????{????
????????????scanf(“%d“&Allocation[i][j]);???
????????????Need[i][j]=Max[i][j]-Allocation[i][j];???
????????????if(Need[i][j]<0)????
????????????{????
????????????????printf(“您輸入的第%d個(gè)進(jìn)程所擁有的第%d個(gè)資源數(shù)錯(cuò)誤請(qǐng)重新輸入:\n“i+1j+1);????
????????????????j--;????
????????????????continue;????
????????????}????
????????}????
????}????
????printf(“請(qǐng)輸入各個(gè)資源現(xiàn)有的數(shù)目:\n“);????
????for(i=0;i ????{????
????????scanf(“%d“&Available[i]);??
????}??????
}????
bool?Safe()????//安全性算法??
{????
????int?ijkl=0;????
????int?Work[MAX_RESOURCE];?//工作數(shù)組他表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目????
????int?Finish[MAX_PROCESS];??//系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成???
????for(i=0;i ????{??
????????Work[i]=Available[i];??
????}????
????//Finish每個(gè)進(jìn)程是否安全??
???
????memset(Finish0sizeof(Finish));???
????for(i=0;i ????{??????
???????if(Finish[i])?continue;??
????????for(j=0;j ????????{??
????????????//第i個(gè)進(jìn)程需要的第j個(gè)資源數(shù)?>?系統(tǒng)現(xiàn)有的第j個(gè)資源數(shù)???
????????????if(Need[i][j]>Work[j])?break;??
????????}??
????????if(j==m)//如果第i個(gè)進(jìn)程所需的各個(gè)資源數(shù)都沒(méi)有超過(guò)系統(tǒng)現(xiàn)有的對(duì)應(yīng)資源數(shù)????
????????{?????
????????????Finish[i]=1;//給該進(jìn)程的FINISH標(biāo)記為true????
????????????for(k=0;k ????????????{????
????????????????Work[k]+=Allocation[i][k];//將Work賦值為?第i個(gè)進(jìn)程各個(gè)已分配資源數(shù)+系統(tǒng)現(xiàn)有的對(duì)應(yīng)資源數(shù)(因?yàn)楫?dāng)改進(jìn)程全部資源數(shù)都滿足時(shí)線程
評(píng)論
共有 條評(píng)論