进程同步模拟设计—生产者和消费者分析

上传人:206****923 文档编号:90850548 上传时间:2019-06-19 格式:DOC 页数:17 大小:490KB
返回 下载 相关 举报
进程同步模拟设计—生产者和消费者分析_第1页
第1页 / 共17页
进程同步模拟设计—生产者和消费者分析_第2页
第2页 / 共17页
进程同步模拟设计—生产者和消费者分析_第3页
第3页 / 共17页
进程同步模拟设计—生产者和消费者分析_第4页
第4页 / 共17页
进程同步模拟设计—生产者和消费者分析_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《进程同步模拟设计—生产者和消费者分析》由会员分享,可在线阅读,更多相关《进程同步模拟设计—生产者和消费者分析(17页珍藏版)》请在金锄头文库上搜索。

1、学 号: 0121010340621课 程 设 计题 目进程同步模拟设计生产者和消费者问题学 院计算机科学与技术学院专 业计算机科学与技术专业班 级1006班姓 名丁探指导教师刘洪星2013年1月17日课程设计任务书学生姓名: 丁探 专业班级: 计算机1006 指导教师: 刘洪星 工作单位: 计算机科学与技术学院 题 目: 进程同步模拟设计生产者和消费者问题 初始条件:1预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1模拟用信

2、号量机制实现生产者和消费者问题。2设计报告内容应说明: 课程设计目的与功能; 需求分析,数据结构或模块说明(功能与框图); 源程序的主要部分; 运行结果与运行情况分析; 自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭

3、,一旦发现,抄与被抄的一律按0分记)指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录1、 需求分析.42、 功能设计.53、源程序.84、运行结果.135、总 结.166、参考文献.16生产者消费者问题1. 需求分析1.1问题描述: 一组生产者向一组消费者提供消息,它们共享一个有界缓冲区n,生产者向其中投放消息,消费者从中取得消息。1.2规则:n 对于生产者进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满,若未满,则可将数据送入缓冲区,并通知消费者进程;否则,等待;n 对于消费者进程:当它去取数据时,要看缓冲区中是否有数据可取,若有则取走一个数据,并通知生产者进

4、程,否则,等待。n 缓冲区是个临界资源,因此,诸进程对缓冲区的操作程序是一个共享临界区,所以,还有个互斥的问题。1.3信号灯设置 :两个同步信号灯- empty :表示空缓冲区的数目,初值为有界缓冲区的大小n; full : 表示满缓冲区(即信息)的数目,其初值为0;一个互斥信号灯- mutex:互斥信号灯,初值为1。 1.4同步描述: 1.5程序描述:main( ) int full=0; /*满缓冲区的数目*/ int empty=n;/*空缓冲区的数目*/ int mutex=1;/*对有界缓冲区进行操作的互斥信号灯*/ cobegin p1 ( ); p2( ); coend p1()

5、 while(生产未完成) 生产一个产品; p(empty); p(mutex); 送一个产品到有界缓冲区; v(mutex); v(full); p2( ) while(还要继续消费) p(full); p(mutex); 从有界缓冲区中取产品; v(mutex); v(empty); 消费一个产品; 1.6 C+语言程序模拟用信号量机制实现生产者和消费者问题:本次课程设计主要通过C+模拟信号量制中各个进程,及各进程之间的互斥、同步关系,来实现生产者和消费者问题。2. 功能设计2.1设计目的:通过实验模拟生产者和消费者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了

6、解。具体如下: 1)掌握基本的同步互斥算法,理解生产者和消费者模型; 2)了解windows中多线程(多进程)的并发执行机制,线程(进程)间的同步和互斥; 3)学习使用windows中基本的同步对象,掌握相应的API。2.2设计功能:利用模拟用信号量机制实现生产者和消费者问题:通过用户控制取进程和放进程,反应生产者和消费者问题中所涉及的进程的同步与互斥。2.3数据流程图:1、生产者2、消费者2.4模块说明:const unsigned short SIZE_OF_BUFFER = 10; /缓冲区长度 unsigned short ProductID = 0; /产品号 unsigned sh

7、ort ConsumeID = 0; /将被消耗的产品号 unsigned short in = 0; /产品进缓冲区时的缓冲区下标 unsigned short out = 0; /产品出缓冲区时的缓冲区下标 int g_bufferSIZE_OF_BUFFER; /缓冲区是个循环队列 bool g_continue = true; /控制程序结束 HANDLE g_hMutex; /用于线程间的互斥 HANDLE g_hFullSemaphore; /当缓冲区满时迫使生产者等待 HANDLE g_hEmptySemaphore; /当缓冲区空时迫使消费者等待 DWORD WINAPI Pr

8、oducer(LPVOID); /生产者线程 DWORD WINAPI Consumer(LPVOID); /消费者线程 3、源程序#include #include const unsigned short SIZE_OF_BUFFER = 20;/有界缓冲区长度int g_bufferSIZE_OF_BUFFER;/开辟缓冲区,用数组表示,可以看成是一个循环队列unsigned short ProductID = 0;/新生产出来的产品的产品号unsigned short ConsumeID = 0;/被消耗的产品的产品号unsigned short in = 0;/产品进缓冲区时的缓冲区

9、下标,用于记录生产者的指针位置unsigned short out = 0;/产品出缓冲区时的缓冲区下标,用于记录消费者的指针位置bool g_continue = 1;/控制程序运行:1表示继续运行,0表示停止运行HANDLE g_hMutex;/线程间的互斥信号量HANDLE g_hFullSemaphore;/资源信号量:缓冲区满HANDLE g_hEmptySemaphore;/资源信号量:缓冲区空DWORD WINAPI Producer(LPVOID);/生产者线程DWORD WINAPI Consumer(LPVOID);/消费者线程const unsigned short PR

10、ODUCERS_COUNT=4;/生产者的个数const unsigned short CONSUMERS_COUNT=3;/消费者的个数const unsigned short THREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;/总线程数HANDLE hThreadsPRODUCERS_COUNT;/各线程的handleDWORD producerIDCONSUMERS_COUNT;/生产者线程的标识符DWORD consumerIDTHREADS_COUNT;/消费者线程的标识符/*-生产一个产品开始-*/生产一个产品,输出其ID号void Pro

11、duce()std:coutstd:endl;std:cerr生产一个产品: +ProductID;std:coutstd:endl;/*-生产一个产品结束-*/*-把新生产的产品放入缓冲区开始-*/把新生产的产品放入缓冲区void Append()std:cerr把生产的产品送入缓冲区;g_bufferin=ProductID;in=(in+1)%SIZE_OF_BUFFER;std:cerrstd:endl;std:cout缓冲区 产品 生产者/消费者std:endl;/新产品放入缓冲区后,输出缓冲区当前的状态for(int i=0;iSIZE_OF_BUFFER;+i) /输出缓冲区下标if (i10)std:couti g_bufferi;elsestd:couti g_bufferi;if(i=in)if(g_bufferi10)std:cout ;elsestd:cout ;std:cout - 生产者;/输出生产者的指针位置if(i=out)if(g_bufferi10)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号