广东技术师范学院实验报告(Pv操作)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
printf("\n 生产停止! ! ! · · · · · ·\n"); break; } switch(n) { case 0: producer();break; case 1: consumer();break; } }
wk.baidu.com
启动生产 启动消费
五、源程序
#include<time.h> #include<stdio.h> #include<stdlib.h> #include<windows.h> int full=0;//满缓冲区 int empty=1;//空缓冲区 int a[5]={0}; //生产函数 void producer() { int i=0; if(empty>0) { printf("生产了一个产品...\n\n"); empty--; printf("超市上架产品...\n\n"); a[i]=1; i=(i+1)%5; full++; } else{ printf("超市货架满...\n\n"); } } //消费函数 void consumer() { int j=0;
2
while(j>=10&&a[j]==1) j++; if(full>0&&j<5) { a[j]=0; full--; printf("消费了一个产品...\n\n"); empty++; } else{ printf("请等待产品上架...\n\n"); } } //主函数 void main() { srand((unsigned)time(NULL)); while(1) { Sleep(1500); int n=rand()%2; int m=rand()%1000; if(m>990) { printf("\n 生产停止! ! ! · · · · · ·\n"); break; } switch(n) { case 0: producer();break; case 1: consumer();break; } }
广东技术师范学院实验报告
学院: 计算机科学学院 姓名: 苏锐生 实验地点: 实验 专业: 信息与计算科学 实验日期: 班级: 09 级 组员: 指导教师签名: 项目名称: 成绩:
学号: 2009034643025 组别:
P.V操作实验
生产与消费
一、实验目的 了解并掌握进程的同步和互斥。 二、实验要求 1. 分别改造 P 操作和 V 操作及生产、消费程序; 2. 在 main()中利用循环通过相关的控制量,分别激活生产者和消费 者; 3. 为了方简单起见,生产者和消费者只对单缓冲区进行操作,如:生 产者将数值“1”填人缓冲区,而消费者将数值“0”填人缓冲区。 三、实验内容 选用 C 语言编写程序,利用 P.V操作解决单生产者和单消费者问题。 四、算法描述 建立函数 void producer(int &t)和 void consumer(int &e)
} }}六、结果与分析
3
这是其中的一部分,下面演示下不成功的情况,就是把 p(mutex)和 p(empty)换下位置
4
5
然后通过主函数 int full=0; 满缓冲区数目 int empty=1; 空缓冲区的数目 int a[5]; 作为货架 1 表示有货,0 表示没货 void producer():若 empty>0,即有空位,可以生产产品上架,执行 p(empty),v(full)否则输出 货架满 void consumer():若 full>0.即架上有产品可消费,执行 p(full),消费产品后,执行 v(empty) 主函数 void main() { srand((unsigned)time(NULL)); while(1) { Sleep(1500); int n=rand()%2; 利用随机函数产生启动生产或者是消费函数的命令 int m=rand()%1000; 用于结束生产 if(m>950) 若大于 950 生产停止 {
printf("\n 生产停止! ! ! · · · · · ·\n"); break; } switch(n) { case 0: producer();break; case 1: consumer();break; } }
wk.baidu.com
启动生产 启动消费
五、源程序
#include<time.h> #include<stdio.h> #include<stdlib.h> #include<windows.h> int full=0;//满缓冲区 int empty=1;//空缓冲区 int a[5]={0}; //生产函数 void producer() { int i=0; if(empty>0) { printf("生产了一个产品...\n\n"); empty--; printf("超市上架产品...\n\n"); a[i]=1; i=(i+1)%5; full++; } else{ printf("超市货架满...\n\n"); } } //消费函数 void consumer() { int j=0;
2
while(j>=10&&a[j]==1) j++; if(full>0&&j<5) { a[j]=0; full--; printf("消费了一个产品...\n\n"); empty++; } else{ printf("请等待产品上架...\n\n"); } } //主函数 void main() { srand((unsigned)time(NULL)); while(1) { Sleep(1500); int n=rand()%2; int m=rand()%1000; if(m>990) { printf("\n 生产停止! ! ! · · · · · ·\n"); break; } switch(n) { case 0: producer();break; case 1: consumer();break; } }
广东技术师范学院实验报告
学院: 计算机科学学院 姓名: 苏锐生 实验地点: 实验 专业: 信息与计算科学 实验日期: 班级: 09 级 组员: 指导教师签名: 项目名称: 成绩:
学号: 2009034643025 组别:
P.V操作实验
生产与消费
一、实验目的 了解并掌握进程的同步和互斥。 二、实验要求 1. 分别改造 P 操作和 V 操作及生产、消费程序; 2. 在 main()中利用循环通过相关的控制量,分别激活生产者和消费 者; 3. 为了方简单起见,生产者和消费者只对单缓冲区进行操作,如:生 产者将数值“1”填人缓冲区,而消费者将数值“0”填人缓冲区。 三、实验内容 选用 C 语言编写程序,利用 P.V操作解决单生产者和单消费者问题。 四、算法描述 建立函数 void producer(int &t)和 void consumer(int &e)
} }}六、结果与分析
3
这是其中的一部分,下面演示下不成功的情况,就是把 p(mutex)和 p(empty)换下位置
4
5
然后通过主函数 int full=0; 满缓冲区数目 int empty=1; 空缓冲区的数目 int a[5]; 作为货架 1 表示有货,0 表示没货 void producer():若 empty>0,即有空位,可以生产产品上架,执行 p(empty),v(full)否则输出 货架满 void consumer():若 full>0.即架上有产品可消费,执行 p(full),消费产品后,执行 v(empty) 主函数 void main() { srand((unsigned)time(NULL)); while(1) { Sleep(1500); int n=rand()%2; 利用随机函数产生启动生产或者是消费函数的命令 int m=rand()%1000; 用于结束生产 if(m>950) 若大于 950 生产停止 {