cout<<"請輸入可利用資源的名字及數目"<<endl;
for(i=0;i<m;i++)
{
cin>>name[i];
cin>>Avaiable[i];
}
cout<<"請輸入Max以"<<m<<"*"<<n<<"矩陣格式輸入"<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>Max[i][j];
cout<<"請輸入Allocation以"<<m<<"*"<<n<<"矩陣格式輸入"<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>Allocation[i][j];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
Need[i][j]=Max[i][j]-Allocation[i][j];
cout<<"請輸入行程的名字"<<endl;
for(i=0;i<n;i++)
{
cin>>Job[i].Name;
Job[i].Finish=0;
size++;
}
cout<<"系統目前可用資源Avaliable"<<endl;
for(i=0;i<m;i++)
cout<<name[i]<<" ";
cout<<endl;
for(i=0;i<m;i++)
cout<<Avaiable[i]<<" ";
cout<<endl;
cout<<" Max Allocation Need "<<endl;
cout<<"行程名";
for(j=0;j<3;j++)
{
for(i=0;i<m;i++)
cout<<name[i]<<" ";
cout<<" ";
}
cout<<endl;
for(i=0;i<n;i++)
{
cout<<" "<<Job[i].Name<<" ";
for(j=0;j<m;j++)
cout<<Max[i][j]<<" ";
cout<<" ";
for(j=0;j<m;j++)
cout<<Allocation[i][j]<<" ";
cout<<" ";
for(j=0;j<m;j++)
cout<<Need[i][j]<<" ";
cout<<" ";
cout<<endl;
}
}
//安全性演算法
void safe()
{
int i,j,L;
L=0;
int f;
int q=0;
int w[100]={0};
int Q[100];
for(i=0;i<m;i++)
w[i]=Avaiable[i];
int k=0;
while(1)
{
for(i=0;i<n;i++)
{
f=1;
for(j=0;j<m;j++)
{
if(Need[i][j]>w[j])
{
f=0;
break;
}
}
if(Job[i].Finish==0&&f==1)
{
for(j=0;j<m;j++)
w[j]=w[j]+Allocation[i][j];
Job[i].Finish=1;
Q[q]=i;
q++;
k=k+1;
break;
}
}
L++;
if(L==n+2)
{
cout<<"不安全狀態"<<endl;
pan=0;
break;
}
if(k==n)
{
cout<<"系統安全"<<endl;
pan=1;
for(i=0;i<n;i++)
cout<<Job[Q[i]].Name<<"";
break;
}
}
for(i=0;i<n;i++)
Job[i].Finish=0;
}
//申請資源函式
void TT()
{
int i;
int b=1,c=1;
cout<<"請選擇申請資源的行程"<<endl;
cin>>a;
cout<<"請輸入各項資源的數目"<<endl;
for(i=0;i<m;i++)
cin>>request[a][i];
for(i=0;i<m;i++)
{
if(request[a][i]>Need[a][i])
{
b=0;
pan=0;
break;
}
}
for(i=0;i<m;i++)
{
if(request[a][i]>Avaiable[i])
{
c=0;
pan=0;
break;
}
}
if(b==1&&c==1)
{
for(i=0;i<m;i++)
{
Avaiable[i]=Avaiable[i]-request[a][i];
Need[a][i]=Need[a][i]-request[a][i];
Allocation[a][i]=Allocation[a][i]+request[a][i];
}
}
}
//申請失敗歸還資料函式
void TD()
{
int i;
for(i=0;i<m;i++)
{
Avaiable[i]=Avaiable[i]+request[a][i];
Need[a][i]=Need[a][i]+request[a][i];
Allocation[a][i]=Allocation[a][i]-request[a][i];
}
}
};
int main()
{
work s;
int T;
int V=1;
s.in_put();
s.safe();
while(V!=0)
{
cout<<"請選擇是否申請資源"<<":1:是 2:否"<<endl;
cin>>T;
switch(T)
{
case 1:s.TT();
if(pan==0)
{
s.TD();
cout<<"不同意申請"<<endl;
break;
}
s.safe();
if(pan==0)
{
s.TD();
cout<<"不同意申請"<<endl;
}
else
cout<<endl;
cout<<"同意申請"<<endl;
break;
case 2:V=0;
break;
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/27982.html
標籤:新技術前沿
下一篇:如何設計表呢
