《计算机操作系统》课程设计 题 目: 生产者---消费者问题 专 业: 软件工程 年 级: 2010级 小组成员: A B 指导教师: 时 间: 地 点: 2012年 5 月 摘要 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区 的线程——即所谓的"生产者"和"消费者"——在实际运行时会发生的问题。生产者的主要作 用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区 消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也 不会在缓冲区中空时消耗数据。 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消 费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不 用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队 列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。 目录 1. 概述 4 2. 课程设计任务及要求 4 2.1 设计任务 4 2.2 设计要求 4 2.3 分工日程表 4 3. 算法及数据结构 4 3.1算法的总体思想 4 3.2 生产者模块 4 3.3 消费者模块 6 4. 程序设计与实现 7 4.1 程序流程图 7 4.2 程序代码 9 4.3 实验结果 14 5. 结论 16 6. 收获、体会和建议 16 6.1收获 16 7. 参考文献 17 1. 概述 本课题设计是完成了"操作系统原理"课程进行的一次全面的综合训练,通过这次课程 设计,充分检验学生对课程的掌握程度和熟练情况,让学生更好的掌握操作系统的原理 及其实现方法,加深对课程的基础理论和算法的理解,加强学生的动手能力。 2. 课程设计任务及要求 2.1 设计任务 通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制. 说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1- 20这20个整型数。 2.2 设计要求 (1)每个生产者和消费者对有界缓冲区进行操作后,实时显示有界缓冲区的全部内容 、当前指针位置和生产者/消费者的标识符。 (2)生产者和消费者各有两个以上。 (3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。 提示:(1) 有界缓冲区可用数组实现。 2.3 分工日程表 " "周三下午 "周四上午 "周四下午 "周五上午 "周五下午 " "A "分析题目 "讨论,分工"编写代码 "测试系统 "编写文档 " "B "分析题目 "讨论,分工"编写代码 "添加备注 "完善系统 " 3. 算法及数据结构 3.1算法的总体思想 在同一个进程地址空间内执行的两个线程。 生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。 消费者线程从缓冲区中获得物品,然后释放缓冲区。 当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者 线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费 者线程将被阻塞,直到新的物品被生产出来。 3.2 生产者模块 3.2.1 功能 在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放 置在一个空缓冲区中供消费者线程消费。当生产者线程生产物品时,如果没有空缓冲 区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。 3.2.2 数据结构 producer_semaphore//生产者的资源信号量(初始值为缓冲区的大小) Buffer[pn] //有界缓冲区 Pn ///缓冲区目标位置 MAX_BUFFER//缓冲区上限 buffer_mutex//互斥信号量 Wait()//等待操作,用于申请资源 Signal()//信号操作,用于释放资源 Sleep()//挂起 3.2.3 算法 "void *producer_thread(void *tid){ " "pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); " "/* 设置状态,PTHREAD_CANCEL_ENABLE是正常处理cancel信号*/ " "while(1){ " "sem_wait(&producer_semaphore); /*等待,需要生存*/ " "srand((int)time(NULL)*(int)tid); " "sleep(rand()%2+1); /*一个或两个需要生产*/ " "while((produce_pointer+1)%20==consume_pointer); /*指
2023-12-20 15:11:59 205KB 文档资料
MFC计算器课程设计报告,C++,内附完全代码
2023-12-15 23:05:05 76KB MFC计算器课程设计报告
1
根据半导体集成电路、利用Hspice软件以及数字电路等课程的知识,使用集成电路CMOS工艺完成触发器的设计,熟悉和掌握集成电路芯片电路设计及模拟方法和技巧。 1、设计如图1所示用传输门构成的电平触发D触发器,和图2所示的边沿触发器 2、写出详细的电路原理分析; 3、编写Hspice网表文件,采用32nm的工艺; 4、进行电路瞬态波形仿真分析,进行功能验证; 5、改变负载,进行瞬态波形模拟,进行性能分析; 6、测量电路的功耗和延时,进行性能分析; 7、改变管子的尺寸,W或者L,再次进行瞬态波形,负载能力和功耗延时
2023-11-24 14:10:57 933KB 集成电路 课程设计 Hspice 边沿触发器
1
本文是一份关于软件工程课程设计的说明书,主要介绍了停车场管理系统的设计任务书和技术参数。该系统的开发平台为Windows XP,开发工具为Microsoft VC++6.0,建模工具为Rational Rose。本文还包括了停车场管理系统的软件工程课程设计报告书。
2023-11-02 15:15:08 1.7MB
1
【HNUST】20级软件工程课程设计报告 选题:连锁门店餐饮服务系统 人数:3人 内容: (1)连锁门店餐饮服务系统小组规约 (2)连锁门店餐饮服务系统需求规约 (3)连锁门店餐饮服务系统概要设计规约 (4)连锁门店餐饮服务系统详细设计规约 (5)连锁门店餐饮服务系统工作日志
2023-11-01 14:25:10 4.78MB 软件工程
1
大一,大二、课程设计,html+css+js 课程设计(包括课程设计报告和答辩ppt)——美食网站源码,纯前端页面,无后端交互---no free
2023-10-23 14:53:48 32.47MB html css Js 大学生
1
三人表决器课程设计报告实现了用最少的元器件实现要求功能。
2023-10-21 17:53:14 159KB 报告
用户通过在URL输入框中输入要下载的网络页面的网址,并点击浏览器界面上相应的按钮,或直接按回车键,就能完成网络页面下载的功能。同时,它还支持浏览本地HTML文件,用户在输入框中输入文件所在盘符及具体路径,并按回车键,或者点击界面上相应按钮,实现浏览本地文件的功能。它能够实现页面的文本链接,能够显示网页图片,并能够通过相应按钮的操作返回上一次访问的页面,还可以通过相应按钮返回后退之前访问的页面。该简易浏览器能帮助用户实现基本的网页浏览功能。
2023-10-20 12:40:10 472KB
1
在本次改进中,通过对PL/0程序的头文件,源文件的更新以及定义新的头文件,小组共实现15个功能,包括一维数组,++,--,+=,-=,*=,/=,%(取余),!(取反),repeat,for(to,downto),else,处理注释,错误提示,标识符或变量中可以有下划线。添加了12个保留字,添加了两条opr指令。在原有的语法基础上,更新了EBNF。错误处理上,新增了对数组,repeat语句等的错误处理。
2023-10-18 13:25:40 2.51MB 编译器
1
这个东西非常的好,请大家多给个面子把Q淡淡的的 的 的 达达的 达达 达达
2023-10-12 09:03:35 57KB
1