• 大小: 624KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2022-06-20
  • 语言: C/C++
  • 标签: C语言  

资源简介

用C或C++语言实现一个程序演示死锁避免算法(银行家算法)。要求该演示程序能显示各进程申请和释放资源以及系统动态分配资源的过程,便于用户观察和分析;允许进程动态地申请资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,令进程等待。如果系统不能分配,也应给出“系统进入不安全状态”的提示。 里面含有代码和课程设计报告!!!!本次课程设计是通过用C模拟实现,内容十分丰富。若有采纳,请在你的课设后面引用的参考文献中加入该条引用!!!望大家尊重版权!!!! 为了避免完全抄袭,里面的课设报告为PDF版,若需要word版,评价留言你的邮箱!!!!!!若觉得有用,记得好评!!绝对有用!!!

资源截图

代码片段和文件信息

#include“iostream“
#include“fstream“
#include“vector“
#include“windows.h“
using namespace std;

vector Allocation[500];   //每个进程已经有的资源
vector Need[500];   //各个进程想要的资源
int pro_size; //进程数
int res_size; //资源种类数
int res[500]; //每类资源的个数
int work[500]; //当前可用资源数
vector Deadlock;
bool* visited;
bool* Dead_res;

void DeadlockChain(int beg){
visited[beg] = true;
cout << “Process:“ << beg << endl;

for(int i = 0; i < Need[beg].size(); i++)
for(int j = 0; j < Deadlock.size(); j++)
for(int k = 0; k < Allocation[ Deadlock[j] ].size(); k++)
if(Allocation[ Deadlock[j] ][k] == Need[beg][i]){
Dead_res[Need[beg][i]] = true;
if(!visited[j])
DeadlockChain(j);
}

for(int t = 0; t < Allocation[beg].size(); t++)
for(int j = 0; j < Deadlock.size(); j++)
for(int k = 0; k < Need[ Deadlock[j] ].size(); k++)
if(Need[ Deadlock[j] ][k] == Allocation[beg][t]){
Dead_res[Allocation[beg][t]] = true;
if(!visited[j])
DeadlockChain(j);
}
}

void read_data(){
ifstream in;
in.open(“D:\\deadlock detection.txt“);
if(!in)
cout << “FILE OPEN FAILED!“ << endl;
memset(res0500);
memset(work0500);
//**********************************************
//Read res
in >> res_size;
if(res_size > 500){
cout << “Number of res should be small than 500“ << endl;
exit(-1);
}

for(int i = 0; i < res_size; i++){
int temp;
in >> temp;
if(temp < 0){
cout << “Illegal No. of res!“ << endl;
cout <<“Please check your input data!“ << endl;
exit(-1);
}
res[i] = work[i] = temp;
}
//************************************************
//Read pro
in >> pro_size;
if(pro_size > 500){
cout << “Number of pro should be small than 500“ << endl;
exit(-1);
}
for(int k = 0; k < pro_size; k++){

int num;
in>> num;

int have_size;
in >> have_size;
for(int i = 0; i < have_size; i++){
int temp; 
in >> temp;
if(temp >= res_size){
cout << “illegal res No.!“ << endl;
cout <<“Please check your input data!“ << endl;
exit(-1);
}
work[temp]--;
if(work[temp] < 0){
cout << “Impossible res dispatch situation!“ << endl;
cout <<“Please check your input data!“ << endl;
exit(-1);
}
Allocation[num].push_back(temp);
}
//--------------------------------------------------------
int want_size;
in >> want_size;
for(int j = 0; j < want_size; j++){
int temp; 
in >> temp;
if(temp >= res_size){
cout << “illegal res No.!“ << endl;
cout <<“Please check your input data!“ << endl;
exit(-1);
}
Need[num].push_back(temp);
}
}

}

//**********************************************************

void Draw(){
HWND hWnd=FindWindow(“ConsoleWindowClass“NULL);
HDC hDc=GetDC(hWnd);
    HPEN hPen1=CreatePen(PS_SOLID20x000000FF);//生成红线
HPEN hPen2=CreatePen(PS_SOLID20x0000FF00);//生成蓝线
Selectobject(hDchPen1);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     753911  2019-08-06 15:39  死锁的避免与检测(操作系统课设)\死锁的避免与检测-夏鑫、许毅立、余创、李若晴.pdf

     文件       6543  2019-01-08 20:04  死锁的避免与检测(操作系统课设)\源代码\死锁检测算法.cpp

     文件       5105  2019-01-09 11:13  死锁的避免与检测(操作系统课设)\源代码\银行家算法.cpp

     目录          0  2019-01-10 20:54  死锁的避免与检测(操作系统课设)\源代码

     目录          0  2019-08-06 15:39  死锁的避免与检测(操作系统课设)

----------- ---------  ---------- -----  ----

               765559                    5


评论

共有 条评论