避免死锁算法

#include <iostream>
using namespace std;
#define MAXPROCESS 50                         /*最大进程数*/
#define MAXRESOURCE 100                         /*最大资源数*/
int AVAILABLE[MAXRESOURCE];                     /*可用资源数组*/
int MAX[MAXPROCESS][MAXRESOURCE];             /*最大需求矩阵*/
int ALLOCATION[MAXPROCESS][MAXRESOURCE];     /*分配矩阵*/
int NEED[MAXPROCESS][MAXRESOURCE];             /*需求矩阵*/
int REQUEST[MAXPROCESS][MAXRESOURCE];         /*进程需要资源数*/
bool FINISH[MAXPROCESS];                         /*系统是否有足够的资源分配*/
int p[MAXPROCESS];                             /*记录序列*/
int m,n;                                     /*m个进程,n个资源*/
void Init();
bool Safe();
void Bank();
int main()
{
     Init();
     Safe();
     Bank();
}
void Init()                 /*初始化算法*/
{
     int i,j;
  
     cout<<"请输入进程的数目:";
     cin>>m;
     cout<<"请输入资源的种类:";
     cin>>n;
     cout<<"请输入每个进程最多所需的各资源数,按照"<<m<<"x"<<n<<"矩阵输入"<<endl;
     for(i=0;i<m;i++)
     for(j=0;j<n;j++)
     cin>>MAX[j];
     cout<<"请输入每个进程已分配的各资源数,也按照"<<m<<"x"<<n<<"矩阵输入"<<endl;
     for(i=0;i<m;i++)
     {
         for(j=0;j<n;j++)
         {
             cin>>ALLOCATION[j];
             NEED[j]=MAX[j]-ALLOCATION[j];
             if(NEED[j]<0)
             {
                 cout<<"您输入的第"<<i+1<<"个进程所拥有的第"<<j+1<<"个资源数错误,请重新输入:"<<endl;
                 j--;
                 continue;
             }
         }
     }
     cout<<"请输入各个资源现有的数目:"<<endl;
     for(i=0;i<n;i++)
     {
         cin>>AVAILABLE;
     }
}
void Bank()                 /*银行家算法*/
{
     int i,cusneed;
     char again;
     while(1)
     {
         cout<<"请输入要申请资源的进程号(注:第1个进程号为0,依次类推)"<<endl;
         cin>>cusneed;
         cout<<"请输入进程所请求的各资源的数量"<<endl;
         for(i=0;i<n;i++)
         {
             cin>>REQUEST[cusneed];
         }
         for(i=0;i<n;i++)
         {
             if(REQUEST[cusneed]>NEED[cusneed])
             {
                 cout<<"您输入的请求数超过进程的需求量!请重新输入!"<<endl;
                 continue;
             }
             if(REQUEST[cusneed]>AVAILABLE)
             {
                 cout<<"您输入的请求数超过系统有的资源数!请重新输入!"<<endl;
                 continue;
             }
         }
         for(i=0;i<n;i++)
         {
             AVAILABLE-=REQUEST[cusneed];
             ALLOCATION[cusneed]+=REQUEST[cusneed];
             NEED[cusneed]-=REQUEST[cusneed];
         }
         if(Safe())
         {
             cout<<"同意分配请求!"<<endl;
         }
         else
         {
             cout<<"您的请求被拒绝!"<<endl;
             for(i=0;i<n;i++)
             {
                 AVAILABLE+=REQUEST[cusneed];
                 ALLOCATION[cusneed]-=REQUEST[cusneed];
                 NEED[cusneed]+=REQUEST[cusneed];
             }
         }
         for(i=0;i<m;i++)
         {
             FINISH=false;
         }
         cout<<"您还想再次请求分配吗?是请按y/Y,否请按其它键"<<endl;
         cin>>again;
         if(again=='y'||again=='Y')
         {
             continue;
         }
         break;
         }
}
bool Safe()                                     /*安全性算法*/
{
     int i,j,k,l=0;
     int Work[MAXRESOURCE];                     /*工作数组*/
     for(i=0;i<n;i++)
     Work=AVAILABLE;
     for(i=0;i<m;i++)
     {
         FINISH=false;
     }
     for(i=0;i<m;i++)
     {   
         if(FINISH==true)
         {
             continue;
         }
         else
         {
             for(j=0;j<n;j++)
             {
                 if(NEED[j]>Work[j])
                 {
                     break;
                 }
             }
             if(j==n)
             {
                 FINISH=true;
                 for(k=0;k<n;k++)
                 {
                     Work[k]+=ALLOCATION[k];
                 }
                 p[l++]=i;
                 i=-1;
             }
             else
             {
                 continue;
             }
         }
         if(l==m)
         {
             cout<<"系统是安全的"<<endl;
             cout<<"安全序列:"<<endl;
             for(i=0;i<l;i++)
             {
                 cout<<p;
                 if(i!=l-1)
                 {
                     cout<<"-->";
                 }
             }
             cout<<""<<endl;
             return true;
         }
     }
     cout<<"系统是不安全的"<<endl;
     return false;
高手们看哈哪里错了? 请指教,小弟刚学。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值