| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

生产者与消费者算法模拟课程设计

文***享

贡献于2021-07-03

字数:7589




课程设计说明书



题目 生产者消费者算法模拟





院 系: 计算机科学工程
专业班级: 信息安全(xxxx)班
学 号:
学生姓名: xxxx
指导教师: xxxx

2013年 xx月 xx 日


xxxx学课程设计(文)务书
计算机 院系 计算机 教研室
学 号
20113xxxxx
学生姓名
xxxx
专业(班级)
xxxxx
设计题目
生产者消费者算法模拟






(1)系统作业进程数目
(2)系统资源种类数目
(3)系统作业进程类资源需求数目
(4)系统作业进程已分配资源数目






(1)检查系统安全状态:根系统作业进程类资源需求数目已分配资源数目等计算否存安全序列
(2)检查系统否继续某进程资源分配请求




求设计说明书字数3000字




201211251126 根课程设计求查找相关资料完成需求分析
201211261127 进行系统概设计
201211271128 进行系统详细设计源代码书写
201311291130 系统进行调试分析写出课程设计报告





[1] Cay SHorstmannGary Cornell编著JAVA核心技术 卷 I北京:机械工业出版社2008
[2] 郑莉编著Java语言程序设计(第二版)北京:清华学出版社2011
[3] 吕国英等编著算法设计分析北京:清华学出版社2009
[4] 马军等编软件工程项目案例实践指导 北京:清华学出版社2013
[5] 汤子瀛等编著 计算机操作系统西安:西安电子科技学出版社2011

指导教师签字

教研室签字


2012年xx月xx日

指导教师评语:
















成绩:





指导教师:

年 月 日
xxxx学课程设计(文)成绩评定表



目录

1问题描述 1
11目 1
12设计求 1
2需求分析 1
3 概设计 1
31程序流程图 1
4 详细设计 2
41程序框架 2
411生产者消费者父类 2
412 生产者类 5
413 消费者类 6
414 程序入口 6
42基算法分析 7
421 wait(mutex)signal()数值信号 7
422 isBufferEmpty()isBufferFull()信号 7
423 produce()存数方法consume()取数方法 8
5 调试分析 10
51启动生产者线程测试结果分析 10
52启动消费者线程测试结果分析 11
6 户手册 11
7 测试结果 12
8 设计体会 13
参考文献 13
附录 13







1问题描述
11目
掌握信号方法PV操作定义掌握PV操作实现进程间步互斥方法加深进程步互斥概念理解
12设计求
设计程序进程创建三子进程三子进程生产者进程两消费者进程求:
l 父子进程父进程创建享存储区进行通信生产者进程数组中十数值发送5缓区组成享存中
l 两消费者进程轮流接收输出十数值时两消费者进程读出数值进行累加求
l 考虑生产者进程生产速度消费者进程速度
2需求分析
生产者消费者问题著名进程步问题然进程间步必涉进程间互斥通信问题问题解决着强现实意义现实意义类计算机中界资源互斥享生产者消费者计算机界资源访问程序户界资源印机磁带机等设备
3 概设计
31程序流程图
说明:图31 程序流程图示首先生产者消费者线程创建便访问缓区生产者缓区没线程访问缓区未满生产数存放缓区中条件没满足生产者线程进入阻塞状态消费者样需缓区没线程访问时求缓区未空缓区取数中条件满足样进入阻塞状态
生产者线程创建
消费者阻塞
生产者缓区放入数



否线程访问缓区





消费者生产者阻塞

缓区否满


否线程访问缓区


缓区否空




消费者线程创建
生产者阻塞
消费者缓区中取数




图31 程序流程图
4 详细设计
41程序框架
411生产者消费者父类
public class SuperThread extends JPanel{
定义缓区读写锁
private Lock bufferLock
享缓区
public static IntBuffer buffer IntBufferallocate(5)
生产者数组
public int array[] {1569811131073}
生产者执行次数
public static int count 0
两生产者取出数累加
public static int consumerSum 0
记录消费者取数次数
public static int consumerCount 0
存放缓区中取数
private static int consumerData
定义线程名
public String nameString
线程互斥信号值 0 表示生产者进程值 1 表示消费者进程
public static int mutex 0
* 构造函数 *
public SuperThread(String name){
完成变量初始化
}
* 获线程名 *
public String getNameString() {
return nameString
}
* 设置线程名 *
public void setNameString(String nameString) {
thisnameString nameString
}
* 获互斥信号 *
public static int getMutex() {
return mutex
}
* 设置互斥信号 *
public static void setMutex(int mutex) {
SuperThreadmutex mutex
}
* 判断否线程访问缓区没线程进行加锁 *
public boolean wait(int mutex){
if (mutex 1) {
return false
}else {
return true
}
}
* 释放进程操作完成信号实质修改mutex信号值 *
public static void signal(){
mutex 0
}
* 判断缓区否空 *
public boolean isBufferEmpty(){
根缓区中否0存判断否空
0数5空反空
}
* 判断缓区否满 *
public boolean isBufferFull(){
根缓区中否0存判断否空
0数0满反满
}
* 消费数缓区中取数 *
public void consume(){
if (wait(mutex) && isBufferEmpty()) {判断否访问缓区
加锁
bufferLocklock()
try {
设置互斥信号
缓区取数
取数缓区置0
释放互斥信号
}finally{
解锁
bufferLockunlock()
}
}
}
* 消费者取缓区数*
public int getBufferData(int index){
完成取数操作
return data
}
* 生产数缓区中存数*
public void produce(){
if (wait(mutex) && isBufferFull()) {判断否访问缓区
bufferLocklock()加锁
try{
设置互斥信号
缓区存数
释放互斥信号
}finally{
解锁
bufferLockunlock()
}
}
}
* 生产者公缓区放数*
public void putBufferData(int index){
完成想缓区存数操作
}
}
412 生产者类
public class Producer extends SuperThread implements Runnable{
生产者休眠时间
private int producerDelay
* 生产者构造函数 *
public Producer(String name) {
super(name)
}
* 获生产者休眠时间 *
public int getProducerDelay() {
return producerDelay
}
* 设置生产者休眠时间*
public void setProducerDelay(int producerDelay) {
thisproducerDelay producerDelay
}
* 线程中run函数线程启动时默认调函数*
@Override
public void run() {
线程启动缓区存数操作
}
}
413 消费者类
public class Consumer extends SuperThread implements Runnable {
* 消费者休眠时间 *
private int consumerDelay
* 消费者构造函数 *
public Consumer(String name) {
super(name)
}
* 获消费者休眠时间 *
public int getConsumerDelay() {
return consumerDelay
}
* 设置消费者休眠时间 *
public void setConsumerDelay(int consumerDelay) {
thisconsumerDelay consumerDelay
}
* 线程中run函数线程启动时默认调函数 *
@Override
public void run() {
while (true) {
线程启动缓区取数操作
}
}
414 程序入口
函数 main(String[] args) {
生产者消费者象定义producerconsumer1consumer2
设置休眠参数100020002500
创建线程producerThreadconsumer1Threadconsumer2Thread
启动线程producerThreadstart()consumer1Threadstart()
consumer2Threadstart()
}
42基算法分析
421 wait(mutex)signal()数值信号
数值信号wait(mutex)通整型值mutex设置表示缓区否已访问具体程:线程需访问缓区时先确定wait(mutex)信号值mutex值1wait(mutex)真便进行步操作mutex值0wait(mutex)真该线程阻塞线程完成缓区访问需调signal()信号信号值mutex进行释放释放mutex值1便线程够访问缓区wait(mutex)signal()代码:
public boolean wait(int mutex){wait(mutex)信号
if (mutex 1) {
return false
}else {
return true
}
}
public static void signal(){signal()信号
mutex 0
}
422 isBufferEmpty()isBufferFull()信号
述wait(mutex)信号足控制线程间步互斥必须isBufferEmpty()isBufferFull()两信号生产者信号isBufferFull()判断缓区否满wait(mutex)型号值真isBufferFull()信号值真时生产者线程缓区进行存数操作否阻塞等机会消费者样辅助信号isBufferEmpty()判断缓区否空缓区空wait(mutex)真消费者缓区进行取数操作isBufferEmpty()isBufferFull()代码:
public boolean isBufferEmpty(){判断缓区否空
int count 0
for (int i 0 i < buffercapacity() i++) {
if (bufferget(i) 0) {根缓区中0数判断缓
区0数5(缓区容量5)空 反空
count ++
}
}
if (count 5) {
return true
}else {
return false
}
}
public boolean isBufferFull(){判断缓区否满
int count 0
for (int i 0 i < buffercapacity() i++) {
if (bufferget(i) 0) {根缓区中0数判断缓
区0数5(缓区容量5) 满反满
count ++
}
}
if (count < 5) {
return false
}else {
return true
}

}
423 produce()存数方法consume()取数方法
produce()方法生产者条件满足情况缓区进行存数操作条件wait(mutex)true && isBufferFull()true消费者调consume()方法样满足样条件:wait(mutex)true && isBufferEmpty()trueproduce()consume()方法代码:
* 生产数缓区中存数*
public void produce(){
if (wait(mutex) && isBufferFull()) {
bufferLocklock()该程序段加锁防止线程访问缓区
try{
setMutex(1)线程互斥信号值mutex设置1互斥
int index 0
for (int i 0 i < buffercapacity() i++){寻找存数位置
if (bufferget(i) 0) {
index i
break
}
}
putBufferData(index)缓区中存入数
signal()释放互斥信号mutex设置0
}finally{
bufferLockunlock()解锁
}
}
}
* 消费数缓区中取数 *
public void consume(){
if (wait(mutex) && isBufferEmpty()) {
bufferLocklock()该程序段加锁防止线程访问缓区
try {
setMutex(1)线程互斥信号值mutex设置1互斥
int index 0存放序查找第0数摆
int i
for (i 0 i < buffercapacity() i++) {序查找第 0数
if (bufferget(i) 0) {
index i
break
}else if(bufferget(4) > 0){缓区满情况
index 5
}
}
consumerData getBufferData(index1)取数
consumerCount ++
if (consumerCount < 2 ) {
consumerSum consumerSum + consumerData计算两次取数
if (consumerCount 2) {
Systemoutprintln(消费者取数:+consumerSum)
consumerSum 0
consumerCount 0
}
}
bufferput(index1 0)已取数缓区重新置0
consumerPrintBufferData()输出取数缓区
signal()释放互斥信号mutex设置0
}finally{
bufferLockunlock()解锁
}
}
}
5 调试分析
51启动生产者线程测试结果分析
没启动生产者线程缓区空导致isBufferEmpty()信号真消费者线程访问缓区取数测试结果图51:
图51启动生产者线程测试结果
52启动消费者线程测试结果分析
没启动消费者启动生产者缓区未满前生产者直缓区生产数直缓区满止没消费者消费数缓区满生产者缓区生产数测试结果图52:

图52启动消费者线程测试结果
6 户手册
编写语言:JAVA
运行环境:Windows XP78 + MyElipse + JDK17
7 测试结果
根分启动生产者线程启动消费者线程分析结果正确结果出知生产者消费者算法模拟成功面出完整代码运行结果部分图片图717273:

图71

图72

图73
8 设计体会
操作系统门课程课程中讲线程必定会提生产者消费者问题问题够模拟线程间步异步线程间通信易学生理解线程关系联系
次课程设计中通编写代码实现生产者消费者算法中算法思想体现通信号函数控制线程执行算法编写程中遇许问题断调试查阅资料解决线程更深解明白操作系统通种机制实现线程间条紊执行
想说进入学学期课程设计家分组方式完成课程设计题目设计程中出现问题组员间交流讨时效时问题解决想点生活工作中会帮助
参考文献
[1] Cay SHorstmannGary Cornell编著JAVA核心技术 卷 I北京:机械工业出版社2008
[2] 郑莉编著Java语言程序设计(第二版)北京:清华学出版社2011
[3] 吕国英等编著算法设计分析北京:清华学出版社2009
[4] 马军等编软件工程项目案例实践指导 北京:清华学出版社2013
[5] 汤子瀛等编著 计算机操作系统西安:西安电子科技学出版社2011
附录








文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

用多线程同步方法解决生产者消费者问题操作系统课程设计

题 目用多线程同步方法解决生产者-消费者问题(Producer-Consumer Problem)学 院计算机科学与技术学院专 业软件工程班 级姓 名 指导教师 年月日 目 录目 录 1课程设计任务书 1正 文 21.设计

文***享 3年前 上传488   0

操作系统课程设计银行家算法的模拟实现

操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期信息工程学院题目: 银行家算法的模拟实现 一、设计目的本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

文***品 3年前 上传686   0

数据结构和算法课程设计题目

XX大学课程设计课程名称: 数 据 结 构 与 算 法院(部)名 称: 信息与计算科学学院组长姓名学号 同组人员姓名指导教师姓名: 设 计 时 间: 2010.6.7----2009.6.27一、《数据结构与算法》课程设计参考题目(一)参考题目一(每位同学选作一个,同组人员

文***品 11个月前 上传382   0

操作系统课程设计编程序模拟银行家算法

课程设计报告书 课程名称: 操作系统原理 题 目: 编程序模拟银行家算法 系 名: 信息工程系 专业班级: 软件 姓 名: 学 号:

文***品 3年前 上传726   0

进程调度算法的实现计算机操作系统课程设计

题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,将这些信息输出至文件中; (5)设计基于时间片的多优先级调度算法; (6)动态调度,并把所有调度信息输出至文件中。(7)理解进程调度相关理论;(8)掌握时间片调度原理;(9)掌握高优先级

文***品 3年前 上传586   0

数据结构课程设计报告最小生成树Kruskal算法

计算机科学与技术系课程设计报告 2014-2015学年第二学期课程数据结构课程设计名称Kruskal算法求最小生成树学生姓名 学号 专业班级 软件工程指导教师 2014年X月题目:设计程序完成如下功能:对给定过的网和起点,用kruskal算法的基本思想求解其所有的最小生成树1、问题分析和任务定义根据课设题目要求,拟将整体程序分为三大模块

文***品 1年前 上传209   0

操作系统课程设计银行家算法报告

《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级:计科班 专 业:计算机科学与技术 指导教师: 时 间: 2009 XX大学 计

文***品 3年前 上传618   0

操作系统课程设计磁盘调度算法

操作系统课程设计磁盘调度算法目 录1 课程设计目的及要求……………………………………………………12 相关知识…………………………………………………………………13 题目分析…………………………………………………………………24 概要设计…………………………………………………………………2 4.1 先来先服务(FCFS)的设计思想………

文***享 3年前 上传549   0

操作系统课程设计磁盘调度算法

《计算操作系统》课程设计报告 姓名: 班级:软件 学号: 指导老师:

文***品 3年前 上传462   0

《操作系统 银行家算法》课程设计报告

《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级: 计科班 专 业:计算机科学与技术 XX大学 计算机科学与信息学院目 录1 课程设计目的 ………………………………………

文***品 3年前 上传812   0

合工大页面置换算法操作系统课程设计报告

计算机与信息学院《操作系统综合设计》报告设计题目:页面置换算法学生姓名:学 号:专业班级:计算机科学与技术班2015 年 X月一、设计题目 3二、开发环境与工具 3三、设计原理 31.最佳(Optimal)置换算法 32.先进先出(FIFO)页面置换算法 43.最近最久未使

文***品 3年前 上传557   0

银行家算法《操作系统》课程设计报告

《操作系统》课程设计报告课题: 银行家算法 专业计算机科学与技术学生姓名班级计算机学号指导教师信息工程学院一、实验要求和实验目的实验目的:本课程设计是学生学习完《操作系统原理》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统

文***享 3年前 上传697   0

银行消费者模拟试题

银行消费者模拟试题 单选题 1、《个人贷款管理暂行办法》规定,贷款人应建立有效的个人贷款全流程管理机制,制订贷款管理制度及每一贷款品种的操作规程,明确相应贷款对象和范围,实施(),建立贷款各操作环节的考核和问责机制。 A、全面风险管理 B、差别风险管理 C、重点风险管理 D、流程风险管理  2、银监会《电子银行业务管理办法》自()起施行。 A、2005年3月1日 B、2005年

s***3 11年前 上传9764   0

首次适应算法最佳适应算法

姓名:学号:实验名称:进程调度模拟实验 实验目的:了解动态分区存储管理方式中的数据结构和分配算法,加深对动态分区存储管理方式及其实现技术的理解。实验内容:#include<iostream.h>#include <malloc.h>typedef struct Spare{ int SA; int size;}spare;void init(spare *S,in

文***享 3年前 上传1630   0

算法与数据结构的商品货架管理课程设计报告(还有程序源代码)

课程设计课 程: 算法与数据结构 题 目: 商品货架管理 专 业: 计算机类 班 级: 座 号: 姓 名: 2012年 X月 X 日一、要解决的问题商店货架以栈

文***品 1年前 上传323   0

粒子群算法(优化算法)毕业设计论文

 毕 业 论 文 题 目 粒子群算法及其参数设置 专 业 信息与计算科学 班 级 学 号 学 生 指导教师

文***品 5年前 上传1471   0

先进生产者发言稿

先进生产者发言稿  王树明同志是中国网络通信集团公司吉林省长春市通信分公司的一名工程师。1982年9月,他因一次意外事故导致身体高位截瘫。20多年来,他忍受着常人难以忍受的痛苦,坚守工作岗位,出色地完成了市话维护的本职工作;他认真钻研新技术、新业务,在轮椅上参与了近百项科研技改项目,为国家直接或间接创造近400万元的经济效益;他热情为广大群众服务,义务修理电话7万余部,修理各类电器4000多

1***4 8年前 上传443   0

银行业务模拟与离散事件模拟课程设计

 工学系课程设计报告设 计 题 目:银行业务模拟与离散事件模拟 系 别:工学系 专 业 (方 向): 年 级、 班: 学 生 姓 名: 学 生 学 号:

知***享 4年前 上传720   0

概率统计、算法

1. 统计1. 如图是样本容量为200的频率分布直方图.根据此样本的频率分布直方图估计,样本数据落在[6,10)内的频数为_____ 642. 甲、乙两名同学在五次考试中数学成绩统计用茎叶图表示如图所示,则甲、乙两名同学成绩较稳定(方差较小)的是______.乙3. (等距抽样)某班有学生48人,现用系统抽样的方法,抽取一个容量为4的样本,已知座位号分别为

z***s 10年前 上传809   0

模拟PID调节器的设计课程设计

模拟PID调节器的设计第一章 引言PID是Proportional-Integral-Derivational的缩写,分别指比例、积分、微分。在工业过程控制的发展史上,PID控制是历史上最悠久、生命力最强的控制方式,也是迄今最通用的控制方法。PID控制以其简单清晰的结构、良好的鲁棒性和广泛的适用范围, 深受工业界的青睐,并且日益受到控制理论界的重视。即使在美、日等工业发达国家,采用高级控

文***享 1年前 上传301   0

《模拟电路》课程设计心得体会

《模拟电路》课程设计心得体会  本学期我们开设了《模拟电路》与《数字电路》课,这两门学科都属于电子电路范畴,与我们的专业也都有联系,且都是理论方面的指示。正所谓“纸上谈兵终觉浅,觉知此事要躬行。”学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在本学期暨模电、数电刚学完之际,紧接着来一次电子电路课程设计是很及时、很必要的。这样不仅能加深我们对电子电路的任职,而且还及时、真正的做

x***y 9年前 上传560   0

直流稳压电源的设计模拟电路课程设计报告

模拟电路课程设计报告设计课题:直流稳压电源的设计班级:电子学号:姓名: 指导老师: 完成日期:2012年目录一、设计任务及要求……………………3二、总体设计思路………………………31.直流稳压电源设计思路………………………………32.直流稳压电源原理……………………………………33、滤波电路——电容滤波电路…………………………54、稳压电路………………

文***品 1年前 上传284   0

0104079模拟退火算法在贷款组合优化决策中的应用

模拟退火算法在贷款组合优化决策中的应用 刘则毅 刘灿 (天津大学数学系,天津 300072) 摘要 针对贷款组合优化决策模型的求解问题,本文提出了一种改进的模拟退火算法。数值计算的结果表明,该算法具有很强的适用性。 关键词 贷款组合 模拟退火 全局优化 随机搜索 1 引言 风险贷款组合配给决策,是在综合考虑贷款收益和风险的前提下,从众多的贷款对象中选择一组

d***y 10年前 上传25228   0

第1课生活与算法

课题第一课 生活与算法日期课时安排1课时课型新授课教学目标1、 通过探讨、解决具体生活问题的方法与步骤,了解算法的概念2、 通过体验、观摩形象直观的生活实例,学会建立数学模型,了解变量的概念,理解计算机处理问题的一般过程3、 通过探究学习,初步了解计算机语言的发展历程重点和难点重点:算法的概念,用计算机处理问题的一般过程难点:变量的概念,建立数学模型教具准备师

文***品 2年前 上传622   0

3D图形算法

3D简介   我们首先从坐标系统开始。你也许知道在2D里我们经常使用Ren?笛卡儿坐标系统在平面上来识别点。我们使用二维(X,Y):X表示水平轴坐标,Y表示纵轴坐标。在3维坐标系,我们增加了Z,一般用它来表示深度。所以为表示三维坐标系的一个点,我们用三个参数(X,Y,Z)。这里有不同的笛卡儿三维系统可以使用。但是它们都是左手螺旋或右手螺旋的。右手螺旋是右手手指的卷曲方向指向Z轴正方向,而大拇指

d***9 10年前 上传8780   0