生产者消费者同步问题的算法实现.docx

上传人:b****3 文档编号:4287869 上传时间:2023-05-06 格式:DOCX 页数:8 大小:24.94KB
下载 相关 举报
生产者消费者同步问题的算法实现.docx_第1页
第1页 / 共8页
生产者消费者同步问题的算法实现.docx_第2页
第2页 / 共8页
生产者消费者同步问题的算法实现.docx_第3页
第3页 / 共8页
生产者消费者同步问题的算法实现.docx_第4页
第4页 / 共8页
生产者消费者同步问题的算法实现.docx_第5页
第5页 / 共8页
生产者消费者同步问题的算法实现.docx_第6页
第6页 / 共8页
生产者消费者同步问题的算法实现.docx_第7页
第7页 / 共8页
生产者消费者同步问题的算法实现.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

生产者消费者同步问题的算法实现.docx

《生产者消费者同步问题的算法实现.docx》由会员分享,可在线阅读,更多相关《生产者消费者同步问题的算法实现.docx(8页珍藏版)》请在冰点文库上搜索。

生产者消费者同步问题的算法实现.docx

生产者消费者同步问题的算法实现

生产者消费者同步问题的算法实现

一、实验目的:

全面理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。

二、实验内容:

问题描述:

一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。

假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。

功能要求:

根据进程同步机制,编写一个解决上述问题的演示程序,可显示缓冲池状态、放数据、取数据等过程。

三、编程工具:

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()结束

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2