《计算机操作系统》课程设计 题 目: 生产者---消费者问题 专 业: 软件工程 年 级: 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 文档资料
林美华老师,计算机组成原理5份实验报告,包括ms14工程文件 实验一:设计64位两重 进位方式的ALU 实验二:设计64位三重 进位方式的ALU 实验三:使用SRAM芯片构建静态存储器 实验四:使用DRAM芯片构建动态存储器 实验五:用语言方框图 表示指令周期
2023-12-18 20:08:54 1.38MB 计算机组成原理 实验报告
1
本实验报告内容完整,分类详细。值得借鉴参考学习。
2023-12-17 21:26:03 47KB 迈克尔逊干涉仪 实验报告
1
详见:https://blog.csdn.net/Timi2019/article/details/134756247 网络五子棋游戏 必做部分: (1)服务器端为多线程,当判断有偶数个用户连接时,方可开始游戏。 (2)先连接的客户执黑棋,先下。另一客户执白棋。 (3)双方交替下棋,由服务器端程序判断客户本次下棋步骤是否有效,仅将有效的下棋步骤传递给双方。 (4)客户端程序负责本地下棋界面的显示工作,与服务器通信,并处理相应的鼠标事件。 (5)下棋胜负由客户端自行判定。提供客户退出按钮,点击按钮,将退出游戏。 选作部分: (1)由服务器端程序判定游戏胜利方,并终止游戏,向双方显示游戏胜利者信息。 (2)提供玩家注册功能,并保存该玩家胜负局数信息、等级、中途逃逸次数等信息。 (3)游戏初始化时,向双方显示玩家等级、逃逸次数等基本信息,玩家可选择是否开始和对手的游戏。 三、开发工具与平台 使用IDEA编写代码,网络编程+多线程+swing+mysql。整体代码使用了MVC架构,数据库部分使用了mybatis框架运用注解开发简化操作。
2023-12-16 01:13:21 7.27MB java mysql 五子棋小游戏
MFC计算器课程设计报告,C++,内附完全代码
2023-12-15 23:05:05 76KB MFC计算器课程设计报告
1
按照后期进行数据分析的需求,对数据进行预处理。 -描述性统计:选择合适的方法对数据进行统计分析。包括对数值型和类别型属性的统计,并对分析结果进行图形化的展示(使用ggplot2或者lattice包)。 -推断性统计:选择合适的假设检验方法,分析属性间的相关性、两组数据间是否具有显著性差异,分析结果并给出结论及必要的图形展示。 - 数据挖掘 根据数据特征及需求,利用分类、聚类或时间序列方法挖掘蕴含在数据中的模式及必要的图形展示,用回归模型预测走势 注意:对聚类结果分析聚簇特征   对分类结果计算准确性。   使用时间序列分析方法可判断数据是否存在趋势、周期性等特征,或对数据进行预测。 (分类、聚类、时间序列,回归模型至少使用2种方法)
2023-12-15 14:41:58 3.36MB r语言 开发语言 数据挖掘 数据分析
汽车行业知识报告系列——智能座舱(智能座舱,车载芯片,人机交互,T-Box,HUD,车载系统OS)
2023-12-14 16:51:43 5.08MB 智能汽车
1
BGA焊接失效分析报告完整版 生产过程中,工艺参数设定不当,如回流焊设定、印刷机参数设定等等,导致虚焊。
2023-12-14 11:37:59 603KB BGA焊接失效
1
东吴证券-汽车热管理行业深度报告:乘新能源汽车东风,热管理迎来新机遇-230423
2023-12-14 08:26:27 2.87MB
1
本文主要论述的是基于WEB的选课系统的系统维护模块的设计与实现。 设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中,首先对系统管理模块进行了详尽的需求分析,经分析得到系统管理模块主要完成如下的功能:用户基本信息、选课信息的录入,查看,修改,删除等,同时还具有查询各个模块的功能,数据备份,数据还原 ,注销等功能。系统管理模块是整个系统的指挥中心,保证整个系统在校园网上安全有效地运作。之后根据需求提出了系统管理模块的总体设计方案,并据此进行了详细设计和编码实现。系统使用B/S结构设计和开发,系统的编码实现基于VS.NET平台,使用ASP.NET作为开发语言,SQL Server 2000作为数据库。代码中通过使用进程中的Session、尽量使用存储过程和尽量减少数据库连接的打开时间等手段来提高性能。
2023-12-13 13:01:47 2.56MB asp.net
1