• 大小: 7.36KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-04-14
  • 语言: C/C++
  • 标签: 实现  银行  模拟  算法  

资源简介

银行家算法分配资源的模拟实现(main.cpp)

资源截图

代码片段和文件信息

#include 
#include 
using namespace std;
#define Max_process 50                        /*最大进程数*/
#define Max_source 50                        /*最大资源数*/
int Available[Max_source];                    /*可用资源数组*/
int Max_use[Max_process][Max_source]={{753}{322}{902}{222}{433}};     /*最大需求矩阵*/
int Allocation[Max_process][Max_source]={{010}{200}{302}{211}{002}};    /*分配矩阵*/
int Need[Max_process][Max_source];            /*需求矩阵*/
int Request[Max_process][Max_source];        /*进程需要资源数*/
bool Finish[Max_process];                        /*系统是否有足够的资源分配*/
int p[Max_process];                             /*记录序列*/
int m=5 n=3;                                    /*m个进程n个资源*/
void Init();
bool Safe();
void Bank_safe();
void Show(int int);
int main()
{
    Init();
    Safe();
    Bank_safe();
}
void Init()                /*初始化算法*/
{
    int ij;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            //scanf(“%d“&Allocation[i][j]);
            Need[i][j] = Max_use[i][j] -Allocation[i][j];
          /* if (Need[i][j] < 0)
            {
                printf(“您输入的第%d个进程所拥有的第%d个资源数 错误请重新输入:\n“i+1j+1);
                j--;
                continue;
            }*/
        }
    }
    printf(“请输入各个资源现有的数目:\n“);
    for (i = 0; i < n; i++)
    {
        scanf(“%d“&Available[i]);
    }
}
void Bank_safe()                /*银行家算法*/
{
    int i cusneed flag = 0;
    char again;
    while (1)
    {
        Show(n m);
    input:
        printf(“请输入要申请资源的进程号(注:第1个进程号为0依次类推)\n“);
        scanf(“%d“&cusneed);
        if (cusneed >=m)
        {
            printf(“没有该进程,请重新输入\n“);
            goto input;
        }
        printf(“请输入进程所请求的各资源的数量\n“);
        for (i = 0; i < n; i++)
        {
            scanf(“%d“&Request[cusneed][i]);
        }
        for (i = 0; i < n; i++)
        {
            if (Request[cusneed][i] > Need[cusneed][i])//如果用户选择的线程的第i个资源请求数>该线程该资源所需的数量
            {
                printf(“您输入的请求数超过进程的需求量!请重新输入!\n“);
                goto input;
            }
            if (Request[cusneed][i] >Available[i])//如果用户选择的线程的第i个资源请求数>系统现有的第i个资源的数量
            {
                printf(“您输入的请求数超过系统有的资源数!请重新输入!\n“);
                goto input;
            }
        }
        for (i = 0; i < n; i++)//如果请求合理,那么下面
        {
           Available[i] -= Request[cusneed][i];//系统可用资源减去申请了的
           Allocation[cusneed][i] += Request[cusneed][i];//线程被分配的资源加上已申请了的
            Need[cusneed][i] -= Request[cusneed][i];//线程还需要的资源减去已申请得到的
        }
        if (Safe())//AVAILABLE Allocation  Need变动之后,是否会导致不安全
        {
            printf(“同意分配请求!\n“);
        }
        else
        {
            printf(“您的请求被拒绝!\n“);
            for (i = 0; i < n; i++)
            {
               Available[i] += Request[cusneed][i];
               Allocation[cusneed][i] -= Request[cusneed][i];
                Need

评论

共有 条评论