资源简介

基于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

评论

共有 条评论