生产者消费者同步问题的算法实现.docx
- 文档编号:4287869
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:8
- 大小:24.94KB
生产者消费者同步问题的算法实现.docx
《生产者消费者同步问题的算法实现.docx》由会员分享,可在线阅读,更多相关《生产者消费者同步问题的算法实现.docx(8页珍藏版)》请在冰点文库上搜索。
生产者消费者同步问题的算法实现
生产者消费者同步问题的算法实现
一、实验目的:
全面理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。
二、实验内容:
问题描述:
一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。
假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。
功能要求:
根据进程同步机制,编写一个解决上述问题的演示程序,可显示缓冲池状态、放数据、取数据等过程。
三、编程工具:
C、Java、VC或其它可视化语言
平台任选
四、具体设计要求及有关说明
1.有3个生产者进程,分别为P1、P2和P3;
2.有4个消费者进程,分别是C1、C2、C3和C4;
3.缓冲区单元个数N=15;
4.不同的生产进程可生产不同的产品(比如字母、数字、符号);不同的消费进程可有不同的消费方式(比如“显示”、“打印”、“拼接成字符串”、“改变大小写”等)。
自己可任意定义。
实现代码:
#include
#include
voidmain()
{
intfull=0;//用于判断缓冲池是否为满
intemputy=15;//用于判断缓冲池时候为空
charbuffer[15][10];//用于存放产品
charch[10];//用于接收生产的产品和消费的产品
inti=0,j=0;
intnum;
intnumber;
intnumb;
printf("----------------------------------产品使用说明-------------------------------\n");
printf("1生产者生产产品\n");
printf("2消费者消费产品\n");
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生产不同的产品:
");//当number为3时生产字符,为4时生产数字,为5时生产字符
scanf("%d",&number);
//以下生产字符
if(number==3)
{
if(full==15)
{
printf("产品已满!
\n");
}
if(full<15)
{
printf("请输入生产的产品:
");
scanf("%s",&ch);
for(j=0;j { buffer[i][j]=ch[j]; } j++; buffer[i][j]='\0'; i++; full++; emputy--; printf("产品生产成功! 产品为: %s\n",buffer[i-1]); } }//if(number==3)结束 //以下生产数字 if(number==4) { if(full==15) { printf("产品已满! \n"); } if(full<15) { printf("请输入生产的产品: "); scanf("%s",&ch); for(j=0;j { buffer[i][j]=ch[j]; } j++; buffer[i][j]='\0'; i++; full++; emputy--; printf("产品生产成功! 产品为: %s\n",buffer[i-1]); } }//if(number==4)结束 //以下生产字符 if(number==5) { if(full==15) { printf("产品已满! \n"); } if(full<15) { printf("请输入生产的产品: "); scanf("%s",&ch); for(j=0;j { buffer[i][j]=ch[j]; } j++; buffer[i][j]='\0'; i++; full++; emputy--; printf("产品生产成功! 产品为: %s\n",buffer[i-1]); } }//if(number==5)结束 }//if(num==1)结束 if(num==2)//当num为2时,消费者消费产品 { printf("请输入6或者7或者8或者9选择不同消费方式: ");//当numb为6时显示,为7时打印,为8时转换成小写,为9时转换成大写 scanf("%d",&numb); //以下为显示消费模式 if(numb==6) { if(emputy<15) { i--; emputy++; full--; printf("消费成功! 显示: %s\n",buffer[i]); } else { printf("产品为空! \n"); } }//if(numb==6)结束 //以下为打印消费模式 if(numb==7) { if(emputy<15) { i--; emputy++; full--; printf("消费成功! 打印: %s\n",buffer[i]); } else { printf("产品为空! \n"); } }//if(numb==7)结束 //以下为转换成小写消费模式 if(numb==8) { if(emputy<15) { i--; emputy++; full--; printf("消费成功! 转换成小写: %s\n",strlwr(buffer[i])); } else { printf("产品为空! \n"); } }//if(numb==8)结束 //以下为转换成大写消费模式 if(numb==9) { if(emputy<15) { i--; emputy++; full--; printf("消费成功! 转换成大写: %s\n",strupr(buffer[i])); } else { printf("产品为空! \n"); } }//if(numb==9)结束 }//if(num==2)结束 }//while结束 }//main()结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 生产者 消费者 同步 问题 算法 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)