• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签: C++  避免死锁  模拟  

资源简介

银行家算法是一个经典的避免死锁的算法,此模拟程序可以让同学们更好的理解银行家算法的思想

资源截图

代码片段和文件信息

#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        {
  

评论

共有 条评论