网站大量收购闲置独家精品文档,联系QQ:2885784924

操作系统课程设计-用多进程同步方法演示“生产者-消费者”问题操作系统.docx

操作系统课程设计-用多进程同步方法演示“生产者-消费者”问题操作系统.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

东莞理工学院城市学院

《计算机操作系统》课程设计

题目:用多进程同步方法演示“生产者-消费者”问题

专 业: 软件工程 _

年 级: 2012级软工3班

小组成员:

指导教师:

时 间: 2014.12.24—2012.12.26

地 点:

东莞理工学院城市学院计算机与信息科学系制

2012年5月

摘要

本次进行操作系统课程设计的任务是设计一个模拟生产者消费者工作的系统。这个问题中有一种生产者和一种消费者,生产者和消费者对同一个缓冲区进行操作,互斥的访问缓冲区。本次课程设计的作用就是需要加深对多进程如何正确访问资源的认识,同时掌握信号量在互斥访问时应该如何正确有效地使用。

目录

概述 4

课程设计任务及要求 5

设计任务 5

设计要求 5

算法及数据结构 6

算法的总体思想 6

生产者模块 6

功能 7

数据结构 7

算法 7

消费者模块 8

功能 8

数据结构 8

程序设计与实现 9

程序流程图 9

程序代码 9

实验结果 11

5.结论 14

收获、体会和建议 14

参考文献 14

概述

生产者—消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。

而当某个进程释放资源时,则它就相当一个生产者。

一个有限空间的共享缓冲区,负责存放货物。

生产者向缓冲区中放物品,缓冲区满则不能放。

消费者从缓冲区中拿物品,缓冲区空则不能拿。

课程设计任务及要求

设计任务

1、设计目的:通过研究Linux的进程同步机制和信号量,实现生产者消费者问题的并发控制。

2、说明:有界缓冲区内设有26个存储单元,放入取出的产品设定为26个大写英文字母。

3、分工情况:

时间

人员

工作内容

工作情况

周三下午

张志成,叶煜雄

查找相关资料,讨论

制定工作方案

,完成

周四上午

张志成,叶煜雄

模块设计,编写代码

未完成

周四下午

张志成,叶煜雄

编写代码

完成

周五上午

张志成,叶煜雄

界面设计及调试

未完成

周五下午

张志成,叶煜雄

界面设计,编写文档

完成

设计要求

生产者与消费者均有二个以上

生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生产者与消费者

生产者的生产速度与消费者的消费速度均可在程序界面调节,在运行中,该值调整后立即生效

生产者生产的产品由随机函数决定

多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码

每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符

采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态

算法及数据结构

申请空缓冲区缓冲区数0设置生产速度可增生产者生产产品打印到缓存区

申请空缓冲区

缓冲区数0

设置生产速度

可增生产者

生产产品

打印到缓存区

仓库已满,线程阻

产品

产品数0

消费产品

产品减少

打印到缓存区

设置消费速度

仓库已满,线程阻

生产者模块

功能

生产产品

控制生产速度

数据结构

publicclassIncreaseThreadextendsThread

IncreaseThread.java//生产者线程类publicclassIncreaseThreadextends

IncreaseThread.java

//生产者线程类

publicclassIncreaseThreadextendsThread

{

privateMyStoragemyStorage;//定义MyStorage类的引用。

staticlongspeed=1000;//定义speed变量,表示线程速度

publicstaticintpause1=0;//pause1变量用来控制生产者线程的开始与暂停

//定义构造方法,接收一个MyStorage类型的变量

publicIncreaseThread(MyStoragemyStorage)

{

this.myStorage=myStorage;

}

//run()方法调用MyStorage类型变量指向的对象的increase()方法,开始生产元素。

publicvoidrun()

{

while(true)

{

if(pause1==1)

{

try

{

Thread.sleep(speed);

}

catch(InterruptedExceptione)

{

e.printStackTrace();

}

myStorage.

文档评论(0)

159****1944 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档