资源简介
模拟吃水果的同步模型:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
代码片段和文件信息
/*
This program default set:
the time of father put the apple : 3s
the time of mother put the orange : 3s
the count of BigSon eat oranges : 5 3s/one
the count of LittleSon eat oranges : 4 3s/one
the count of BigDaughter eat apples : 3 4s/one
the count of BigDaughter eat apples : 2 4s/one
*/
#include
#include
#include //define EXIT_*
#include
#include
#include
#define threadNum 6
void *threadFunct(void *arg);
void showInfo();
sem_t availPut; //还可以往盘子里放几个水果
sem_t apple; //同步信号量
sem_t orange;
pthread_mutex_t appleLock; //互斥琐
pthread_mutex_t orangeLock;
int appleNum=1;
int orangeNum=1;
short appleNeed=1;
short orangeNeed=1;
short appleNeed_LD=1;
short appleNeed_BD=1;
short orangeNeed_BS=1;
short orangeNeed_LS=1;
FILE *fp;
char* name[threadNum]={“Father““Mother““BigSon““LittleSon““BigDaughter““LittleDaughter“};
int main (){
int res;
int i;
pthread_t threadArray[threadNum];
void *thread_res;
fp=fopen(“result_info““w“);
res=sem_init(&availPut00);
if (res!=0){
perror (“availPut Semaphone init failed!“);
exit(EXIT_FAILURE);
}
res=sem_init(&apple01);
if (res!=0){
perror (“apple Semaphone init failed!“);
exit(EXIT_FAILURE);
}
res=sem_init(&orange01);
if (res!=0){
perror (“orange Semaphone init failed!“);
exit(EXIT_FAILURE);
}
res=pthread_mutex_init(&appleLockNULL);
if (res!=0){
perror (“apple huchi Semaphone init failed!“);
exit(EXIT_FAILURE);
}
res=pthread_mutex_init(&orangeLockNULL);
if (res!=0){
perror (“orange huchi Semaphone init failed!“);
exit(EXIT_FAILURE);
}
showInfo();
for (i=0;i res=pthread_create(&threadArray[i]NULLthreadFunct(void *)i);
if (res==0){
fprintf(fp“*** %s *** thread create succeed !\n“name[i]);
}else{
perror (“thread create failed!\n“);
exit(EXIT_FAILURE);
}
}
//sleep(2);
for (i=threadNum-1;i>=0;i--){
res=pthread_join(threadArray[i]&thread_res);
if (res==0){
fprintf(fp“pick up ### %s ### thread %d\n“name[i]i);
}else{
perror (“Thread join failed!“);
}
}
fprintf(fp“Thread joinall threads finished!\n“);
showInfo();
sem_destroy(&availPut);
sem_destroy(&apple);
sem_destroy(&orange);
pthread_mutex_destroy(&appleLock);
pthread_mutex_destroy(&orangeLock);
exit(EXIT_SUCCESS);
}
void showInfo(){ //sem_t is defined in /usr/include/bits/semaphore.h
// (long int)orange.__align
fprintf(fp“\n*********************************\n“);
fprintf(fp“There are %d apple(s) %d orange(s)\n“appleNumorangeNum);
fprintf(fp“*********************************\n“);
}
void *threadFunct(void *arg){
int n=(int)arg;
int i;
switch(n)
{
case 0: //father
{
sleep(1);
i=1;
while(appleNeed){
sem_wait(&availPut); //P -1
fprintf(fp“\n----------------------\n“);
fprintf(fp“Father put an apple\n“);
fprintf(fp“Father have put %d apple(s)\n“i++);
fprintf(fp“-------
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-01-18 15:32 fruits\
文件 16627 2011-01-18 10:35 fruits\fruit
文件 8382 2011-01-18 10:34 fruits\fruit.c
文件 8362 2011-01-18 15:32 fruits\fruit.txt
文件 12350 2011-01-18 10:35 fruits\fruits
文件 5892 2011-01-17 21:41 fruits\fruits.c
文件 218 2011-01-18 09:32 fruits\Makefile
文件 6153 2011-01-18 10:39 fruits\result_info
文件 1271211 2011-01-18 21:17 操作系统课设报告.doc
- 上一篇:GPS数据转谷歌地图轨迹的工具NMEA2KMZ301
- 下一篇:教师教学辅助系统开发
相关资源
- os课程设计 操作系统课程设计
- 编译原理课程设计代码 赋值语句的递
- 网络工程与组网课程设计
- vfp 课程设计-仓库管理系统
- 广工数据库课程设计全
- 电子技术课程设计报告—数字式电阻
- 数据结构课程设计——统计学生成绩
- 操作系统设计与实现第三版光盘
- 软件工程课程设计 WEB的网上书店系统
- 酒店管理系统 简单 很适合做课程设计
- 数字电子技术课程设计 医院病房呼叫
- 机械制造工艺学课程设计指导书及习
- 南阳理工学院Linux聊天室课程设计
- 药品管理信息系统信息管理系统课程
- 软件测试课程设计报告_网上购物系统
- 软件工程课程设计-学生成绩管理系统
- 企业工资管理系统课程设计
- Web课程设计
- 数据库课程设计-运动会成绩管理系统
- 在线考试系统(课程设计)源码
- UML课程设计 用例图、顺序图等的画法
- 操作系统清华大学出版社-第三版.pd
- 30天自制操作系统中文版光盘 源码中
- 计算机网络课程设计 校园网规划
- 计算机操作系统原理英语试题
- 一个小型操作系统的设计与实现
- 机械原理课程设计包装线生产设计
- 转载:二级斜齿圆柱减速器课程设计
- 两个密钥的三重DES实现系统-密码学课
- 操作系统 实验报告
评论
共有 条评论