ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:322.74KB ,
资源ID:13547356      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13547356.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实现生产者消费者问题课程设计报告书Word文件下载.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实现生产者消费者问题课程设计报告书Word文件下载.docx

1、指导教师:军工作单位:题目: 实现生产者消费者问题初始条件:学习了高级语言程序设计、汇编语言、数据结构、计算机组成原理课程,掌握了一种计算机高级语言。要求完成的主要任务:(包括课程设计工作量与其技术要求,以与说明书撰写等具体要求)1.通过研究Linux的线程机制和信号量实现生产者消费者(Bounded Buffer)问题的并发控制。2.实验条件要求:每人一台与Linux主机联网的Windows主机,普通用户权限。3.编程与上机实现;4.撰写课程设计报告,包括:1)设计题目与要求2)总的设计思想与系统平台、语言、工具等。3)数据结构与模块说明(功能与流程图)4)源程序5)运行结果与运行情况6)调

2、试记录7)自我评析和总结时间安排:序号阶段容所需时间1消化资料、系统设计1天2编程、调试天3撰写报告合计天指导教师签名:2011年12月26日系主任(或责任教师)签名:年月日1设计题目与要求1.1设计题目1.2设计要求(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部容、当前指针位置和生产者消费者线程的标识符。(2)生产者和消费者各有两个以上。(3)多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。2 设计思想与系统平台、语言、工具2.1 设计思想生产者消费者问题是一种同步问题的抽象描述。 计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一

3、资源时,可以看作是消耗,且该进程称为消费者。 而当某个进程释放资源时,则它就相当一个生产者。 在同一时刻只能有一个生产者或一个消费者使用缓冲区,有互斥信号量可以控制各个生产者和消费者之间互斥,使得生产和消费的工作能够有序的进行,而不至于发生死锁。 通过一个有界缓冲区(用数组来实现,类似循环队列)把生产者和消费者联系起来。假定生产者和消费者的优先级是一样的,只要缓冲区未满,生产者就可以生产产品并将产品送入缓冲区。类似地,只要缓冲区未空,消费者就可以从缓冲区中去走产品并消费它。应该禁止生产者向满的缓冲区送入产品,同时也应该禁止消费者从空的缓冲区中取出产品,这一机制有生产者线程和消费者线程之间的互斥

4、关系来实现。 在本问题中,共需要一个Mutex和两个Semaphore.其中,Mutex是用来锁定临界区的,以解决对共享数据buffer的互斥访问问题(无论是对生成者还是对消费者);共需要两个Semaphore,这是因为在本问题中共有两个稀缺资源.第一种是非空这种资源,是在消费者之间进行竞争的.第二种是非满这种资源,是在生产者之间进行竞争的.所以,一般来说,需要锁定临界区,就需要Mutex;有几种稀缺资源就需要几个Semaphore.对稀缺资源的分析不能想当然.稀缺资源不一定是指被共享的资源,很多时候是指线程会被阻塞的条件(除了要进临界区被阻塞外).在生产者消费者问题中,消费者会在缓冲区为空时

5、被阻塞,所以是一种稀缺资源;需要设置一个信号量consumer_semaphore,初值设为0;生产者会在缓冲区为满时被阻塞,所以也是一种稀缺资源.需要设置一个信号量producer_semaphore,初值设为buffer的大小MAX_BUFFER2.2 系统平台与语言、工具(1)操作系统:Linux(2)程序设计语言:C语言(3)编译器:GCC3 数据结构与模块说明共享数据:#define NUM 20int queueNUM;int p = 0,c = 0;/记录动态数组下标位置sem_t blank_number, product_number;pthread_mutex_t coun

6、ter_mutex = PTHREAD_MUTEX_INITIALIZER;生产者线程入口函数:void *producer_thread_fun( unsigned int *arg) int realarg= (int)arg;/强制类型转换参数 producer(realarg); return NULL;生产者线程处理函数:void *producer(const int i) while(1) sem_wait(&blank_number); pthread_mutex_lock(&counter_mutex); sleep(2); queuep=p+1; pthread_mutex

7、_unlock(& sem_post(&product_number); sleep(rand() % 5);/Random block 0-4 seconds 生产者线程的函数流程图如下:消费者线程入口函数:void *consumer_thread_fun(void *arg) int realarg = (int)arg; consumer(realarg);消费者线程的处理函数:void *consumer(const int i) sleep(rand() % 5); 消费者线程的处理函数流程图如下:4 源程序#include pthread.hstdio.hsemaphore.h#

8、include/ Record location of the dynamic array subscript/Producer Function int j; time_t t;srand(unsigned) time(&t);/Initialize the random number seed while(1) sem_wait(& printf(Producer Number %d thread identifier: %u ,i+1,(unsigned int)pthread_self();Produce %dn,queuep);The current state of the buf

9、fe:*n); Number: for(j = 0;j NUM;j +) printf(%4d,j+1); n Value: NUM;,queuej);nPointer:j+) if(j != p)printf( else printf( +np=(p + 1)%NUM;/pbackward one/Production of the thread entry function/Force type conversion parameters/Consumer functionConsumer Number %d thread identifier:Consumed %dn,queuec); queuec = 0;/Fill empty position 0The current state of the buffer:Number: n Pointer:= c) - c = (c + 1)%NUM;sleep(rand() % 5);/consumer thread entry functionvoid *consumer_thread_fun(void

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

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