zoukankan      html  css  js  c++  java
  • 银行家算法避免死锁

    要求:

    1. 完成程序数据结构的设计,数据的录入。
    2. 完成进程需求矩阵的输出,包括最大需求矩阵,尚需资源矩阵,可获得资源显示。
    3. 完成某进程请求资源试分配。
    4. 完成安全性检查。

    #include<iostream.h>

    #include<string.h>

    #include<stdlib.h>

    #include<stdio.h>

    #define Status int

    #define true 1

    #define false 0

    int M=100;//进程的最大数为100

    int N=100;//资源的最大数为100

    int Claim[100][100]={0};//各进程所需各类资源的最大需求

    int Available[100]={0};//系统可用资源

    char name[100]={0};//资源的名称

    int Allocation[100][100]={0};//系统已分配资源

    int Need[100][100]={0};//还需要资源

    int Request[100][100]={0};//请求资源向量

    int finish[100]={0};//存放安全序列

    int Work[100]={0};//存放系统可提供资源

    1. 1.         试探分配

    当进程pi提出资源申请时,系统执行下列步骤:

    (1)若Request[i][j]≤Need[i][j],转(2);

         否则错误返回

    (2)若Request[i][j]≤Available[j],

         转(3);否则进程等待

    (3)试探着把资源分配给进程Pi,则有:

         Available[j]=Available[j]-Request[i][j];� 

    Allocation[i],[j]=Allocation[i],[j]+Request[i][j]; 

         Need[i],[j]=Need[i],[j]-Request[i][j];

    1. 2.         安全性检测算法:

    n  借助于死锁的安全性测试算法来实现。

    n  定义布尔型向量finish[k],k=1,..,n。检测死锁算法如下:

    (1)Work= Available

    (2)在剩余的进程集合中查每一个进程Pk,如果Claim[k,*]- Allocation [k,*]=0,则finish[k]:=true;否则finish[k]:=false;这里k=1,..,n

    (3)在剩余的进程集合中找一个进程Pk,需满足条件:

    finish[k]=false&(request[*]≤Work)

    找到这样的Pk便转(4);否则转(5)

    (4)Work:= Work + Allocation;finish[k]:=true;然后转(3)

    (5) 如果对k=1,..,n若finish[k]=true不成立,那么,系统出现了死锁,并且finish[k]=false的Pk为死锁进程。

     1 #include<iostream.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 #define Status int
     6 #define true 1
     7 #define false 0
     8 int M=100;//进程的最大数为100
     9 int N=100;//资源的最大数为100
    10 int Claim[100][100]={0};//各进程所需各类资源的最大需求
    11 int Available[100]={0};//系统可用资源
    12 char name[100]={0};//资源的名称
    13 int Allocation[100][100]={0};//系统已分配资源
    14 int Need[100][100]={0};//还需要资源
    15 int Request[100][100]={0};//请求资源向量
    16 int finish[100]={0};//存放安全序列
    17 int Work[100]={0};//存放系统可提供资源
    18 void write();
    19 
    20 main()
    21 {
    22     write();
    23 }
    24 
    25 void write()
    26 {
    27     char s;
    28     int i,j;
    29     FILE* fp=fopen("C:\io.txt","w");
    30     
    31     printf("请输入进程数:
    ");
    32     scanf("%d",&M);
    33     fprintf(fp,"
    %d",M);
    34 
    35     printf("请输入资源数:
    ");
    36     scanf("%d",&N);
    37     fprintf(fp,"
    %d",N);
    38 
    39 
    40     for(i=0;i<M;i++)
    41     {
    42         for(j=0;j<N;j++)
    43         {
    44 
    45             printf("请输入%d进程所需%d资源的最大需求:
    ",i+1,j+1);
    46             scanf("%d",&Claim[j][i]);
    47             fprintf(fp,"
    %d",Claim[j][i]);
    48         }
    49     }
    50 
    51     for(i=0;i<N;i++)
    52     {
    53         printf("请输入%d资源的最大需求:
    ",i+1);
    54         scanf("%d",&Available[i]);
    55         fprintf(fp,"
    %d",Available[i]);
    56     }
    57 
    58     
    59     fclose(fp);
    60 }
  • 相关阅读:
    玉蓉方面膜加盟费多少 玉蓉方绿豆面膜怎么做代理 怎么加盟玉蓉方
    音频处理软件:GoldWave,太强大了,批量处理音频
    杂记 SY
    ThinkPHP函数详解--D函数:实例化数据模型类
    杂记
    如何选择jQuery版本 1.x? 2.x? 3.x?
    传值涉及到中文字符串时,字符编码的问题
    对数字进行分组处理:每10个为一组
    mac下安装protocol buffer并用python解析
    淘宝返利攻略
  • 原文地址:https://www.cnblogs.com/mxdmxdmxd78/p/5512378.html
Copyright © 2011-2022 走看看