资源简介
基于Linux的实现进程的信号量互斥申请
包括说明书 源代码 任务书
这事一个课程设计的最终答辩

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#define NUM 5 //资源数
pthread_t thread[5];
pthread_mutex_t mut; //互斥信号量
struct zy {
char type; //资源的名称
int n; //资源的数量
};
struct jc {
char name; //名称
int runtime; //执行时间
int waittime; //等待时间
int typenum; //进程所申请的资源数
struct zy r[5]; //所申请资源的信息
};
struct y {
int flag; //标志,0:未出现过的资源,(进程a申请资源B 1个资源B 1个)1:该资源已申请
int index; //资源下标
int tr; //进程的下标
int flag1; //1:该资源不能再申请;0:该资源还可以申请
} Y[10][NUM];
struct jc JC[5];
struct zy ZY[NUM]; //每种资源的名称及数量
int u = 0; //进程数
int a = 0; //资源数
int Available[NUM]; //可使用资源向量
int Max[10][NUM]; //最大需求矩阵
int Allocation[10][NUM]; //分配矩阵
int Need[10][NUM]; //需求矩阵
int Work[NUM]; //工作向量
int Finish[NUM]; //状态标志
int Request[10][NUM]; //进程申请资源向量
//对银行家算法中的需求矩阵进行初始化
int init() {
int i j x;
for (i = 0; i < u; i++) {
for (j = 0; j < a; j++) {
Need[i][j] = Max[i][j] - Allocation[i][j];
}
}
return 0;
}
//输入资源信息
int ziyuan()
{
int ix;
printf(“************************************************\n“);
printf(“请输入资源的种类数:\n“);
fflush(stdin);
x=scanf(“%d“&a);
while(x==0)
{
printf(“不符合规则,请重新输入!\n“);
fflush(stdin);
x=scanf(“%d“&a);
}
for(i=0;i {
printf(“请输入第%d种资源的名称(A---Z):\n“i);
scanf(“%c“&ZY[i].type);
while(ZY[i].type==‘\n‘)scanf(“%c“&ZY[i].type);
while(!isupper(ZY[i].type))
{
printf(“不符合规则,请重新输入!\n“);
scanf(“%c“&ZY[i].type);
while(ZY[i].type==‘\n‘)scanf(“%c“&ZY[i].type);
}
printf(“请输入资源%c的数量:“ZY[i].type);
fflush(stdin);
x=scanf(“%d“&ZY[i].n);
while(x==0)
{
printf(“不符合规则,请重新输入!\n“);
fflush(stdin);
x=scanf(“%d“&ZY[i].n);
}
Available[i]=ZY[i].n;//对可使用资源向量进行初始化
}
return 0;
}
//对整个二维数组Y进行遍历
int judge_pro(int m int p[10]) {
int i j;
for (i = 0; i < m; i++) {
for (j = 0; j < p[i]; j++) {
if (!(Y[i][j].flag1)) {
return 1;
} //只要有1个进程的1种资源未申请完,则返回1
}
}
return 0; //仅当所有进程对资源的申请都达到所需量时才返回0
}
//对二维数组中的某一行(对应某种进程)进行遍历
int panduan1(int tr int p[10]) {
int i;
for (i = 0; i < p[tr]; i++) {
if (!(Y[tr][i].flag1))
return 0; //该进程只要有1个资源未申请完,则返回0
}
return 1; //仅当该进程所有资源都申请完时返回1
}
//产生随机进程和进程所申请的资源,并调用银行家算法
int ra() {
int col[10];
int i j k = 0 w = 0 m = 0 n = 0 q = 0; //k记录最大需求矩阵中数目不为0的元素个数
printf(“\n“);
if (u == 0 || a == 0) {
printf(“请先输入信息!\n“);
return 0;
}
//对Max数组进行遍历,筛选并记录各进程对所有资源的最大申请量大于0的元素信息
for (i = 0; i < u; i++) {
for (j = 0; j < a; j++) {
if (Max[i][j]) {
Y[m][n].index = j; //index记录资源下标
Y[m][n].tr = i; //tr记录进程下标
Y[m][n].flag = 0; //flag=1:所记录的资源已申请过,flag=0:所记录的资源尚未申请
Y[m][n].flag1 = 0; //flag1=1:进程对该资源的申请已达到所需量,flag=0:还未达到所需量
n++;
}
}
col[m] = n; //数组col记录二维数组Y的每一行的列数
n = 0; //对n进行恢复,以便下次循环
m++;
}
//只要有资源未申请完就执行循环
while (judge_pro(m col)) {
int _one = 0;
int tr;
//若该进程所有资源都申请完,则执行循环
do {
tr = rand() % m;
} while (panduan1(tr col)); //
printf(“%c进程申请\n“ JC[Y[tr][0].tr].name);
int x = col[tr];
//若有资源申请完,则使x减
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-12-05 13:24 基于Linux的实现进程的信号量互斥申请\
目录 0 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1622汉超\
文件 31232 2013-12-05 13:37 基于Linux的实现进程的信号量互斥申请\1622汉超\基于Linux的实现进程的信号量互斥申请任务书.doc
文件 130468 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1622汉超\汉超操作系统课程设计说明书.doc
目录 0 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1632韩炜\
文件 31232 2013-12-05 13:36 基于Linux的实现进程的信号量互斥申请\1632韩炜\基于Linux的实现进程的信号量互斥申请任务书.doc
文件 147564 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1632韩炜\韩炜操作系统课程设计说明书 .doc
目录 0 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1641张睿光\
文件 31232 2013-12-05 13:36 基于Linux的实现进程的信号量互斥申请\1641张睿光\基于Linux的实现进程的信号量互斥申请任务书.doc
文件 192702 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1641张睿光\张睿光操作系统课程设计说明书.doc
目录 0 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1648白跃升\
文件 31232 2013-12-05 13:35 基于Linux的实现进程的信号量互斥申请\1648白跃升\基于Linux的实现进程的信号量互斥申请任务书.doc
文件 165611 2013-12-07 17:13 基于Linux的实现进程的信号量互斥申请\1648白跃升\白跃升说明书.doc
文件 23969 2013-11-29 22:52 基于Linux的实现进程的信号量互斥申请\基于Linux的实现进程的信号量互斥申请.c
相关资源
- 语音信号处理 赵力
- 信号奇异点Lipschitz指数计算
- 一个labview仿真的函数信号发生器.vi
- 《数字信号处理第三版》课后习题答
- 基于蓝牙4.0的设备通信方案设计与实
- 瑞利信道的仿真,包括信号的调制,
- 信号估计DOAmusicespritcapon
- 数字频率合成dds正弦波基于FPGA的DDS产
- 用FFT对信号进行频谱分析
- mp重构一维信号(可运行)
- 信号与系统习题(一到八章的习题)
- 利用语音信号的短时能量与短时过零
- 数字信号处理实验1信号系统及其响应
- 谐波小波分析的源代码,应该属于信
- 进程的管道通信编制一段程序,实现
- 2FSK2PSK信号产生器实验实验报告
- 信号与系统 第三版 陈生潭 郭宝龙
- 细菌cyclic di-AMP的信号调控
- 矿井信号收发器通信模块设计
- 矿用多功能WiFi信号转换器的设计
- 基于WiFi技术的矿井信号收发器设计
- 基于Linux的串口服务器设计
- Belle-II和ILC的马约拉纳中微子信号
- LabVIEW 声音信号的采集与存储.vi
- 基于Linux、QT的视频监控系统的设计与
- 关于DDR3信号扇出和走线问题解析
- 在PCB板设计中高效地使用BGA信号布线
- 压缩感知常见测量矩阵一维仿真信号
- 基于ARM7 PWM定时器的图像传感器时序信
- 用ARM7和UC/OS-II设计的信号采集系统
评论
共有 条评论