操作系统课程设计生产者消费者.docx 立即下载
2025-08-27
约3万字
约48页
0
37KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

操作系统课程设计生产者消费者.docx

操作系统课程设计生产者消费者.docx

预览

免费试读已结束,剩余 43 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

操作系统课程设计生产者消费者

第一篇:操作系统课程设计生产者消费者湖北民族学院信息工程学院11级计算机专业操作系统课程设计(操作系统课程设计)生产者和消费湖北民族学院信息工程学院11级计算机专业操作系统课程设计者学生姓名:学生学号:班级:0311401、02、03、04班制二〇一三年十二月一、课程题目分析这个题目是生产者向消费者提供商品,消费者消耗商品,并且两组人共用同一缓冲区。生产者提供了商品之后消费者才能去取商品,消费者若不取走商品则当缓冲区用完之后生产者则不能再向缓冲区中添加新的商品。思考问题:(1)对于生产者进程:每产生一个数据,则需去访问共用缓冲区是否有已满,未满则可以将该数据存入并通知消费者进程,否则不能。(2)对于消费者进程:每当想去消费(取出数据)时,则需访问缓冲区是否为空,为空则不能消费(取出数据),否则可以取,并通知生产者。(3)缓冲区是个临界资源,所有的进程对于该空间都是共享的,所以,还有互斥问题存在。二、课程设计目的通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及原理。由此增加对进程同步问题的了解:(1)掌握基本的同步互斥算法,理解生产者与消费者模型(2)了解windows中多线程(多进程)的并发执行机制,线程(进程)间的同步于互斥(3)学习使用windows中基本的同步对象,掌握相应的API。三、课程设计内容有n个生产者和m个消费者,连接在具有k个单位缓冲区的有界环转缓冲上,湖北民族学院信息工程学院11级计算机专业操作系统课程设计故又称有界缓冲问题。其中Pi和Cj都是并发进程,只要缓冲区未满,生产者进程Pi所生产的产品就可投入缓冲区;类似地,只要缓冲区非空,消费者进程Cj就可以从缓冲区取走并消耗产品。四、开发环境操作系统:Windows系统编写语言:C++语言五、系统分析设计(一)算法原理生产者——消费者问题是典型的进程同步问题,这些进程必须按照一定的生产率和消费率来访问共享缓冲区,用P、V操作解决生产者和消费者共享单缓冲区的问题,可设置两个信号量empty和full,其初值分别为1和0,empty指示能否向缓冲区放入产品,full指示能否从缓冲区取出产品。为了使其协调工作,必须使用一个信号量mutex(初值为1),以限制生产者和消费者互斥地对缓冲区进行存取,另用两个信号量empty1(初值为缓冲区大小)和full1(初值为0),以保证生产者不向已满的缓冲区中放入产品,消费者不从空缓冲区中取产品。(二)功能描述生产者功能描述:在同一个进程地址空间内执行两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。消费者功能描述:消费者线程从缓冲区获得物品,然后释放缓冲区,当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。(三)算法流程图生产者流程图:消费者流程图:湖北民族学院信息工程学院11级计算机专业操作系统课程设计总的流程图:湖北民族学院信息工程学院11级计算机专业操作系统课程设计开始Inti=1,n键盘输入数字,初始化nSeqSquare*b;b=newSeqSquare(n);键盘输入数字,改变i的值i==0?Y退出Ncout(四)数据结构及部分函数描述(1)类SeqSquare:对类SeqSquare的声明及其中一些函数classSeqSquare{public:SeqSquare(intn);~SeqSquare();voidP(intx);//p操作voidV(intx);//v操作boolIsEmpty();//判断是否为空湖北民族学院信息工程学院11级计算机专业操作系统课程设计boolIsFull();//判断是否已满voiddeca();voiddecb();intgetSize();intgetmaxSize();intgettop();intgeta();intgetb();protected:private:};说明:①用动态整型数组*elements来代表缓冲区,不管是生产产品还是对已有产品的消费都需要访问该缓冲区。②函数IsFull()用于判断缓冲区是否已满,生产者能否使用缓冲区。③函数IsEmpty()用于判断缓冲区是否为空,消费者能否使用缓冲区。(2)生产者和消费者操作及显示函数showbuf:voidproducer(SeqSquare*a)//生产者操作{}voidconsumer(SeqSquare*a)//消费者操作{}//缓冲区显示voidshowbuf(SeqSquare*a){}(3)在实现本程序的生产者消费者模型时,具体地通过以下同步对象实现互斥:int*elements;intt
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

操作系统课程设计生产者消费者

文档大小:37KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用