- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验三:银行家算法的实现
一、 基本信息:
a) 实验题目:银行家算法的实现
b) 完成人姓名:韩璐璐
c) 学号d) 报告日期:2016.5.27
二、 实验目的
通过实验,加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握Windows环境下银行家算法的实现方法,同时巩固利用Windows API进行共享数据互斥访问和多线程编程的方法。
三、 实验内容
1. 在Windows操作系统上,利用Win32 API编写多线程应用程序实现银行家算法。
2. 创建n个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。
3. 通过Win32 API提供的信号量机制,实现共享数据的并发访问。
四、程序运行时的初值和运行结果(系统截图)
五、源程序并附上注释
#include iostream
#include time.h
#include vector
#include windows.h
using namespace std;
int r[3] = { 3, 3, 2 };//系统拥有的资源
int r0 = 0, r1 = 0, r2 = 0;//记录申请资源
class pcb
{
public:
int id;
bool state;
int max[3];
int alc[3];
int need[3];
pcb()
{
}
void init()
{
state = false;
cout 请输入进程的id,各个资源总需求量和已占用资源 endl;
cin id;
cout a,b,c三种资源的最大使用量 endl;
cin max[0] max[1] max[2];
cout a,b,c三种资源的已占有量 endl;
cin alc[0] alc[1] alc[2];
}
int rd(int n)
{
return rand() % (n + 1);
}
int request()
{
// Sleep(1000);
r0 = rd(max[0] - alc[0]);
r1 = rd(max[1] - alc[1]);
r2 = rd(max[2] - alc[2]);
cout 进程 id 申请资源a r0 申请资源b r1 申请资源c r2 endl;
if (r0r[0] || r1r[1] || r2r[2])
{
cout 没有那么多资源!!! endl;
return 0;
}
if ((r0 == (max[0] - alc[0])) r1 == (max[1] - alc[1]) r2 == (max[2] - alc[2]))
{
r[0] = r[0] + alc[0];
r[1] = r[1] + alc[1];
r[2] = r[2] + alc[2];
return 1;
}
return 2;
}
};
bool safe(vector pcb temp, int i)
{
int u = r[0] - r0, k = r[1] - r1, l = r[2] - r2;
for (int j = i; jtemp.size() - 1; j++)
temp[j] = temp[j + 1];
temp.pop_back();
int size = temp.size();//记录下容器内还有多少个进程
// int range[size];//记录下队列
int x = 0;//计数器
while (!temp.empty())
{
static int j = 0;
if ((temp[j].max[0] - temp[j].alc[0]) = u (temp[j].max[1] - temp[j].alc[1]) = k
(temp[j].max[2] - temp[j].alc[2]) = l)//判断是否能运行完
{
cout 运行 temp[j].id endl;
u = u + temp[j].alc[0];
k = k + temp[j].alc[1];
l = l + temp[j].alc[2];
for (int e = j; etemp.size() - 1; e++)
temp[e] = temp[e + 1];
temp.pop_back();
if (j = temp.size())
您可能关注的文档
- 建筑设计技术专业毕业实习范文技巧.doc
- 建筑设计院员工考核管理办法技巧.doc
- 交往讲艺术精品合编.ppt
- 建筑施工安全生产检查表技巧.doc
- 建筑施工安全生产事故应急--物体打击技巧.doc
- 建筑施工安全知识竞赛复习题200题技巧.doc
- 梁板吊装方案技巧.doc
- 建筑施工放样毕业设计论文1技巧.doc
- 梁板吊装专项方案技巧.doc
- 梁模板扣件钢管高支撑架计算书(问题反馈)20160527~PKPM云南技巧.doc
- KENWOOD建伍KDC-130UB,KDC-130UG,KDC-130UR,KDC-153RCD 收放机Dutch, English, French, German, Italian, Portuguese, Russian, Spanish, Ukrainian (Quick Start Guide) Europe说明书用户手册.pdf
- 德国metronix通用智能伺服驱动器ARS2000样本.pdf
- 高美迪亚 DVR6628车载录像监控模块使用说明书.pdf
- 台达C2000变频器产品特色及在油田行业中的应用.pdf
- 阿沃德 雷诺德多功能运动控制器(用工具).pdf
- ABB高压电机 AMS 同步电动机(英文介绍).pdf
- KENWOOD建伍KDC-BT430U,KDC-BT530UCD 收放机Dutch, English, French, German, Italian, Portuguese, Russian, Spanish, Ukrainian (Quick Start Guide) Europe说明书用户手册.pdf
- KENWOOD建伍DDX394,DDX417BT,DDX517BT,DDX574BH,DDX594,DDX7051BT,DDX751WBTL,DDX774BH,DDX794多媒体Spanish (Instruction manual) America说明书用户手册.pdf
- 光伏汇流采集器说明书.pdf
- 腾控科技--SDP106安装使用手册.pdf
文档评论(0)