生产者消费者同步问题的算法实现_第1页
生产者消费者同步问题的算法实现_第2页
生产者消费者同步问题的算法实现_第3页
生产者消费者同步问题的算法实现_第4页
生产者消费者同步问题的算法实现_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、生产者消费者同步问题的算法实现一、实验目的:全面理解生产者与消费者问题模型,掌握解决该问题的算法思 想,正确使用同步机制。二、实验内容:问题描述:一组生产者向一组消费者提供消息,它们共享一个 有界缓冲池,生产者向其中投放消息,消费者从中取得消息。假定这 些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入 缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。功能要求:根据进程同步机制,编写一个解决上述问题的演示 程序,可显示缓冲池状态、放数据、取数据等过程。n个缓冲区(Buffer)三、编程工具:C、Java、VC或其它可视化语言平台任选四、具体设计要求及有关说明有3个生产者进程,分

2、别为P1、P2和P3;有4个消费者进程,分别是C1、C2、C3和C4;缓冲区单元个数N=15;不同的生产进程可生产不同的产品(比如字母、数字、符号);不同的消费进程可有不同的消费方式(比如“显 示”、“打印”、“拼接成字符串”、“改变大小写”等)。自 己可任意定义。/用于判断缓冲池是否为满/用于判断缓冲池时候为/用于存放产品用于接收生产的产品和产品使用说明实现代码:#include #includevoid main()int full=0;int emputy=15;空char buffer1510;char ch10;消费的产品int i=0J=0;int num;int number;i

3、nt numb;printf(An”);printf(1生产者生产产品n);printf(2消费者消费产品皿”);printf(3生产字母产品n);printf(4生产数字产品n);printf(5生产符号产品n);printf(6消费方式(显示)n);printf(7消费方式(打印)n);printf(8消费方式(全部变成小写)n);printf(9消费方式(全部变成大写)n);printf(-n);while(true)printf(请输入1或者2进行生产或消费:);scanf(%d”,&num);if(num=1)当num为1的时候,生产者生产产品printf(请输入3或者4或者5生产不

4、同的产品:);当number为3时生产字符,为4时生产数字,为5时生产字符scanf(%d,&number);以下生产字符if(number=3)if(full=15)printf(产品已满!n);printf(请输入生产的产品:);scanf( %s”,&ch);for(j=0;jsizeof(ch);j+)bufferij=chj;j+;bufferij=,0,;i+;full+;emputy-;printf(产品生产成功!产品为:sn”,bufferi-1);/if(number=3)结束以下生产数字if(number=4)if(full15)printf(请输入生产的产品:);scan

5、f( %s”,&ch);for(j=0;jsizeof(ch);j+)bufferij=chj;j+;bufferij=,0,;i+;full+;emputy-;printf(产品生产成功!产品为:sn”,bufferi-1);/if(number=4)结束以下生产字符if(number=5)if(full15)printf(请输入生产的产品:);scanf( %s”,&ch);for(j=0;jsizeof(ch);j+)bufferij=chj;j+;bufferij=0;i+;full+;emputy-;printf(产品生产成功!产品为:sn”,bufferi-1);/if(numbe

6、r=5)结束/if(num=1)结束if(num=2)/当 num为2时,消费者消费产品当numb为6时显示,为7时打印,为8时转换成小写,为9时转 换成大写scanf(%d,&numb);以下为显示消费模式if(numb=6)if(emputy15)i-;emputy+;full-;printf(消费成功!显示:sn”,bufferi);elseprintf(产品为空!n);/if(numb=6)结束以下为打印消费模式if(numb=7)if(emputy15)i-;emputy+;full-;printf(消费成功!打印:sn,bufferi);elseprintf(产品为空!n);/if(numb=7)结束以下为转换成小写消费模式if(numb=8)if(emputy15)i-;emputy+;full-;printf(消费成功!转换成小写:sn”,strlwr(bufferi);elseprintf(产品为空!n);/if(numb=8)结束以下为转换成大写消费模式if(numb=9)if(emputy15)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论