- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用多进程同步方法演示“生产者-消费者”问题课件
**理工大学
操作系统课程设计报告
院(系): 计算机工程学院
专业: 计算机科学与技术 班级: 计算111
学生姓名: ** 学号: 201107015
题目:用多进程同步方法演示“生产者-消费者”问题
起迄日期: 2014.07.07-2014.07.18
设计地点: 现代教育中心101-103、主教学楼B505
指 导 教 师: 王**
2013—2014年度 第 学期: 2014 年 7 月 18 日
课程设计目的
本次操作系统课程设计的主要任务是通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。实验中需要设置多个生产者和多个消费者,生产者和消费者对同一个缓冲区进行操作,互斥的访问缓冲区。本次课程设计的目的就是加深对多进程如何正确访问临界资源的理解,同时掌握条件变量在互斥访问时应该如何正确有效地使用。掌握生产者消费者问题的解决流程和方法,能够在此基础上解决现实中的具体问题。
课程设计内容
课程设计内容:
生产者和消费者进程的数目不固定,可在程序界面上设置
生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生产者与消费者
生产者的生产速度与消费者的消费速度均可在程序界面调节,在运行中,该值调整后立即生效
生产者生产的产品由随机函数决定
多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码
每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符
采用可视化界面,系统系统分析2、系统设计:模块设计:
生产者流程图:
消费者流程图:
四、调试分析:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,线程处于响应取消状态,且采用异步方式响应,在打开独占锁以前的运行路径上存在取消点,则该临界资源将永远处于锁定状态得不到释放。外界取消操作是不可预见的,因此需要POSIX线程API中提供一个pthread_cleanup_push()/pthread_cleanup_pop()函数对自动释放资源线程处于无限循环中,且循环体内没有执行至取消点的必然路径,线程无法由外部其他线程的取消请求而终止。在循环体的必经路径上应该加入pthread_testcancel()调用。
pthread_testcancel()调用、使用平台是apt-get install build-essential #安装gcc/g++/gdb/make 等基本编程工具apt-get install gnome-core-devel #安装 libgtk2.0-dev libglib2.0-dev 等开发相关库文件apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置 apt-get install devhelp #安装 devhelp GTK文档查看程序apt-get install libglib2.0-doc libgtk2.0-doc #安装 gtk/glib 的API参考手册及其它帮助文档apt-get install glade libglade2-dev #安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库apt-get install libgtk2.0*,gtk+2.0所需的所有文件统通下载安装完毕。
第二步:添加消费者
第三步:显示缓冲池信息
第四步:删除生产者
第五步:删除消费者
第六步:设置生产者和消费者的速度
六、程序清单[1] 汤子瀛 编著,《计算机操作系统()》,西安电子科技大学出版社,200年
、
学生 成绩:教师: 年 月 日
设置生产速度
删除消费者
删除生产者
缓冲池信息
添加消费者
主程序
添加生产者
设置消费速度
void init_list()
void on_changed()
void create_pthread_
producer()
void create_pthread_
consumer()
void remove
文档评论(0)