操作系统实验报告生产者消费者问题Word文档下载推荐.docx

上传人:b****5 文档编号:20805097 上传时间:2023-01-25 格式:DOCX 页数:11 大小:391.48KB
下载 相关 举报
操作系统实验报告生产者消费者问题Word文档下载推荐.docx_第1页
第1页 / 共11页
操作系统实验报告生产者消费者问题Word文档下载推荐.docx_第2页
第2页 / 共11页
操作系统实验报告生产者消费者问题Word文档下载推荐.docx_第3页
第3页 / 共11页
操作系统实验报告生产者消费者问题Word文档下载推荐.docx_第4页
第4页 / 共11页
操作系统实验报告生产者消费者问题Word文档下载推荐.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

操作系统实验报告生产者消费者问题Word文档下载推荐.docx

《操作系统实验报告生产者消费者问题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告生产者消费者问题Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。

操作系统实验报告生产者消费者问题Word文档下载推荐.docx

三、课程设计应解决的主要问题:

(1)了解信号量的使用

(2)理解生产者消费者问题模型

(3)掌握真确使用同步机制的方法

(4)实现生产者消费者进程的互斥与同步

四、课程设计相关附件(如:

图纸、软件等):

程序源代码

五、任务发出日期:

2013-12-1课程设计完成日期:

2014-1-1

指导教师签字:

指导教师对课程设计的评语

成绩:

指导教师签字:

年月日

一、设计目的

1、了解信号量的使用

2、加深对信号量机制的理解

二、设计要求

1、理解生产者与消费者问题模型,掌握解决问题的算法思想

2、掌握正确使用同步机制的方法

三、设计说明(含系统框图和(或)主要算法的流程图)

生产者和消费者是经典的进程同步问题,在这个问题中,生产者不断的向缓冲区中写入数据,而消费者则从缓冲区中读取数据。

生产者进程和消费者对缓冲区的操作是互斥,即当前只能有一个进程对这个缓冲区进行操作,生产者进入操作缓冲区之前,先要看缓冲区是否已满,如果缓冲区已满,则它必须等待消费者进程将数据取出才能写入数据,同样的,消费者进程从缓冲区读取数据之前,也要判断缓冲区是否为空,如果为空,则必须等待生产者进程写入数据才能读取数据。

模拟程序的程序流程图如下所示:

1.主程序流程图:

2.生产者进程流程图

3.消费者进程流程图

四、重要代码注释:

/*生产者线程*/

void*producer1(void*s)

{

pthread_mutex_lock(&

the_main);

pthread_mutex_unlock(&

intproid=(int)s;

inti;

for(i=1;

i<

=MAX;

i++)

{

the_mutex);

while(counter==BUFFER_SIZE)

printf("

%d号生产者wait...\n"

proid);

pthread_cond_wait(&

condp,&

%d号生产者唤醒...\n"

}

buffer[in]=1;

%d号生产者生产1放入%d中\n"

proid,in);

in=(in+1)%BUFFER_SIZE;

counter++;

pthread_cond_signal(&

condc);

the_p);

p++;

%d号生产者线程结束\n"

return0;

}

/*消费者线程*/

void*consumer1(void*s)

intconid=(int)s;

intj=1;

intk=0;

while

(1)

if(p==30&

&

counter==0)

break;

while(counter==0)

%d号消费者wait...\n"

conid);

condc,&

%d号消费者唤醒...\n"

if(buffer[out]==4)

%d号消费者在%d处消费%dcounter=%dp=%d\n"

conid,out,buffer[out],counter-1,p);

buffer[out]=0;

out=(out+1)%BUFFER_SIZE;

counter--;

condp);

if(buffer[out]==1&

flg[conid]==0)

flg[conid]=1;

for(j=1;

j<

=29;

j=j+2)

if(flg[j]==1)

k++;

if(k==15)

k=0;

j++)

flg[j]=0;

else

%d消费者线程结束\n"

pthread_exit(0);

/*如果生产者线程只有1,3,5,7,9依然存在,结束所有偶消费者线程*/

for(j=1;

=10;

pthread_create(&

pro[j],0,producer1,(void*)j);

con[j],0,consumer1,(void*)j);

/*如果生产者线程只有2,4,6,8,10依然存在,结束所有奇数消费者线程*/

for(j=2;

con[j],0,consumer2,(void*)j);

pro[j],0,producer2,(void*)j);

/*如果生产者线程只在11-20之间依然存在,结束不在该范围内的其它编号的消费者线程*/

for(j=11;

=20;

j=j+1)

pro[j],0,producer3,(void*)j);

for(j=11;

con[j],0,consumer3,(void*)j);

for(j=12;

con[j],0,consumer4,(void*)j);

/*其他编号生产者线程生产的产品可由任意的消费者线程消费*/

for(j=21;

=30;

pro[j],0,producer4,(void*)j);

con[j],0,consumer5,(void*)j);

for(j=22;

con[j],0,consumer6,(void*)j);

四、运行结果及分析

五、总结

1、本次实验是关于生产者与消费者之间互斥和同步的问题。

问题的是指是P、V操作,实验设一个共享缓冲区,生产者和消费者互斥的使用,当一个线程使用缓冲区的时候,另一个让其等待直到前一个线程释放缓冲区为止。

2、实验中包含的知识点很多,包括临界区资源共享问题、信号量定义、PV操作流程、进程间的通信方式(消息传递和共享内存)、进程同步和互斥、信号量机制解决进程之间的同步与互斥问题等等。

加深了对于本部分内容的理解

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1