设为首页 加入收藏

TOP

银行家算法——C语言(一)
2012-11-06 11:25:09 来源: 作者: 【 】 浏览:1851
Tags:银行家 算法 语言

    #define M 50
   
    int  max[M][M],  allocation[M][M],need[M][M],available[M];   /*定义全局变量*/
   
    int i, j,  n, m, r;
   
    main()
   
    {   void check();
   
    void print();
   
    int  p,q;
   
    int req[M], allocation1[M][M],need1[M][M],available1[M];
   
    printf(“Please input the  processes sum:”);
   
    scanf(“%d”, &n);                           /*输入进程总数*/
   
    printf(“Please input the  kinds  sum :”);
   
    scanf(“%d”, &m);                          /*输入资源种类总数*/
   
    printf(“please input the max resources :”);
   
    for(i=0;i<n; i++)
   
    for(j=0;j<m; j++)
   
    {scanf(“%2d”,&max[i][j]); } /*输入最大矩阵*/
   
    printf(“please input the allocation resources :”);
   
    for(i=0;i<n; i++)
   
    for(j=0;j<m; j++)
   
    scanf(“%d”, &allocation[i][j]);              /*输入已分配资源数*/
   
    printf(“please input the need resources :”);
   
    for (i=0;i<n; i++)
   
    for(j=0;j<m; j++)
   
    { need[i][j]=max[i][j]-allocation[i][j];
   
    printf(“%2d”,need[i][j]);
   
    }                /*输出还需要的资源数*/
   
    printf(“\nplease input the available number :”);
   
    for (i=0;i<m; i++)
   
    scanf(“%d”, &available[i]);                /*输入可用资源数*/
   
    check();                                 /*检测已知的状态是否安全*/
   
    if (r==1)                             /*如果已知的状态安全则执行以下代码*/
   
    {
   
    do {  p=0,q=0;
   
    printf(“\nplease input the NO. of process: ”);
   
    scanf(“%d”, &i);                /*输入请求资源的进程号*/
   
    printf(“please input the resources of request:”);
   
    for(j=0;j<m; j++)
   
    scanf(“%d”,&req[j]);            /*输入该进程所需的资源数 */
   
    for(j=0;j<m; j++)
   
    if(req[j]>need[i][j])
   
    p=1;         /*判断请求是否超过最大资源数*/
   
    if(p)
   
    printf(“The resources of request have been beyond the max number needed!”);
   
    else
   
    {
   
    for(j=0;j<m; j++)
   
    if(req[j]>available[j])
   
    q=1;  /*判断请求是否超过可用资源数 */
   
    if(q)
   
    printf(“There are not enough available resources!”);
   
    else
   
    {
   
    for(j=0;j<m; j++)     /*请求满足条件 */
   
    {   available1[j]=available[j];       /* 保存原已分配的资源数,需要的资源数,和可用的资源数*/
   
    allocation1[i][j]=allocation[i][j];
   
    need1[i][j]=need[i][j];
   
    available[j]=available[j]-req[j];  /* 系统尝试把资源分配给请求的进程 */
   
    allocation[i][j]=allocation[i][j]+req[j];
   
    need[i][j]=need[i][j]-req[j];
   
    }
   
    print();                            /*输出可用资源数*/
   
    check();                          /*进行安全检测*/
   
    if(r==0)                        /*分配后状态不安全*/
   
    {for (j=0;j<m; j++)
   
    {    available[j]=available1[j];   /* 还原分配前的已分配的资 源数,仍需要的资源数和可用的资源数 */
   
    allocation[i][j]=allocation1[i][j];
   
    need[i][j]=need1[i][j];
   
    }
   
    printf(“ This is unsafe  and  return:\n”);
   
    print();
   
    }
   
    }
   
    }
   
    printf(“\nDo you want to continue y or n \n”);  /*判断是否继续进行资源分配*/
   
    } while (getch()=='y‘);
   
    }
   
    }

   

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用于计算公式的代码 下一篇C语言中存储日期和时间的最好方法..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: