1、银行家算法 1操作系统实验三银行家算法姓名:杨益林 学号:71115215报告日期:2017.06.07银行家算法一、实验目的通过实验, 加深对多实例资源分配系统中死锁避免方法银行家算法的理解,掌握 Windows 环境下银行家算法的实现方法,同时巩固利用 Windows API 进行共享数据互斥访问和多线程编程的方法。二、实验内容1.在 Windows 操作系统上,利用 Win32API 编写多线程应用程序实现银行家算法。2.创建 n 个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。3.通过 Win32 API 提供的信号量机制,实现共享数据的并发访问。三、实验步骤(一)设计思路
2、:银行家算法可分为个主要的功能模块,其描述如下:1.初始化由用户输入数据,分别对运行的进程数、总的资源种类数、总资源数、各进程所需要的最大资源数量(Max) ,已分配的资源数量赋值。2.安全性检查算法(1)设置两个工作向量 Work=AVAILABLE;FINISH=false;(2)从进程集合中找到一个满足下述条件的进程,银行家算法FINISH=false;NEED#include#include#include#define False 0#define True 1using namespace std;int Max100100 = 0 ;/各进程所需各类资源的最大需求int ReMa
3、x100100 = 0 ;int Avaliable100 = 0 ;/系统可用资源int ReAvaliable100 = 0 ;char name100 = 0 ;/资源的名称int Allocation100100 = 0 ;/系统已分配资源int ReAllocation100100 = 0 ;int Need100100 = 0 ;/还需要资源int ReNeed100100 = 0 ;int Request100 = 0 ;/请求资源向量int temp100 = 0 ;/存放安全序列int Work100 = 0 ;/存放系统可提供资源int M = 100;/进程的最大数量为1
4、00int N = 100;/资源的最大数量为100void showdata()/显示资源矩阵int i, j;cout “;cout i;/输入须申请的资源号cout Requestj;/输入需要申请的资源for (j = 0; jNeedij)/判断申请是否大于需求,若大于则出错cout Avaliablej)/判断申请是否大于当前资源,若大于则 /出错cout Avaliablei;cout n;N = n;cout mingnumber;namei = ming;/cout number;Avaliablei = number;cout m;M = m;cout Maxij;dofl
5、ag = 0;cout Allocationij;if (AllocationijMaxij)flag = 1;Needij = Maxij - Allocationij;Avaliablej = Avaliablej - Allocationij;if (flag)cout choice;switch (choice)case 1: changeresources(); break;case 2: share(); break;case 3: showdata(); break;case 0: choice = 0; break;default: cout “请正确选择功能号(0-3)!“ endl; break;cout “您已成功退出程序!“ endl;return 1;