資源簡介
銀行家算法是一個經典的避免死鎖的算法,此模擬程序可以讓同學們更好的理解銀行家算法的思想
代碼片段和文件信息
#include?
using?namespace?std;
int?Available[30]; ??//可用資源數組
int?Max_matrix[20][30]; ?//最大需求矩陣
int?Allocation[20][30]; ??//分配矩陣
int?Need[20][30]; ?//?需求矩陣
int?Request[20][30]; ?? ??//進程需要資源數
bool?Finish[20];?????????????????????//?系統是否有足夠的資源分配
int?p[20];????????????????????????????//記錄序列
int?mn;?????????????????????????????//?m個進程n個資源
void?Initial();
bool?Safe();
void?Bank();
int?main()
{
????Initial();
????Safe();
????Bank();
}
void?Initial()??????????????????????????????????//初始化算法
{
????int?ij;
????cout<<“請輸入進程的數目:“;
????cin>>m;
????cout<<“請輸入資源的種類:“;
????cin>>n;
????cout<<“請輸入每個進程最多所需的各資源數(Max_matrix[i][j])按照“< ????for(i=0;i ????for(j=0;j ????cin>>Max_matrix[i][j];
????cout<<“請輸入每個進程已分配的各資源數也按照(Allocation[i][j])“< ????for(i=0;i ????{
????????for(j=0;j ????????{
????????????cin>>Allocation[i][j];
????????????Need[i][j]=Max_matrix[i][j]-Allocation[i][j];
????????????if(Need[i][j]<0)
????????????{
????????????????cout<<“您輸入的第“<????????????????j--;
????????????????continue;
????????????}
????????}
????}
????cout<<“請輸入各個資源現有的數目(Available:)“< ????for(i=0;i ????{
????????cin>>Available[i];
????}
}
void?Bank()??????????????????????????????????//銀行家算法
{
????int?iask;
????char?again;
????while(1)
????{
????????cout<<“請輸入要申請資源的進程號(注:第1個進程號為0依次類推)“< ????????cin>>ask;
????????cout<<“請輸入進程所請求的各資源的數量“< ????????for(i=0;i ????????{
????????????cin>>Request[ask][i];
????????}
????????for(i=0;i ????????{
????????????if(Request[ask][i]>Need[ask][i])
????????????{
????????????????cout<<“您輸入的請求數超過進程的需求量!請重新輸入!“< ????????????????continue;
????????????}
????????????if(Request[ask][i]>Available[i])
????????????{
????????????????cout<<“您輸入的請求數超過系統有的資源數!請重新輸入!“< ????????????????continue;
????????????}
????????}
????????for(i=0;i ????????{
??
評論
共有 條評論