A操作系统课程设计.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
A操作系统课程设计

燕山大学课程设计说明书 课程设计名称:操作系统 班级: 开发小组名称: 课题负责人: 课题组成员:姓名 学号 班级自评成绩 课题开发日期: 1 概述 1.1 课程设计目的 通过编写一个生产者消费者的实例,了解多线程的创建,运行原理,通过信号量机制的运用了解各线程间的协调工作机制;通过实现界面编程,了解MFC编程思想。 1.2 主要完成的任务 如下图所示,有个PUT操作要不断循环地向Buffer1送数据,有Move操作不断地将Buffer1的数据取到Buffer2操作不断地将Buffer2数据取到,有GET操作要不断地从中取数据。PUT、 MOVE、 GET每次操作一个数据,为了在操作的过程中要保证数据不丢失, 每个Buffer每次只能接受一个PUT或一个Move或一个Get,多个操作不能同时操作同一BUFFER。设计一个多道程序完成上述操作。 图1 Buffer操作 Buff1,buffer中容量单位是字符。 (2)提供良好图形界面,显示Buffer的操作过程可以Buffer的容量、PUT、GET、操作的个数; 可以PUT、GET、速度; 实时显示每个Buffer中数据的个数,Buffer的个数实时显示程序运行结束,显示汇总数据: 总的运行时间; Buffer中数据的个数; 已放入BUFFER的数据个数; 已放已取的数据个数; 平均buffer中的数据个数。 MFC MFC是Windows下程序设计的最流行的一个类库它合理的封装了WIN32 API函数,并设计了一套方便的消息映射机制。 在MFC的框架结构下,可以进行消息处理的类的头文件里面都会含有DECLARE_MESSAGE_MAP()宏,这里主要进行消息映射和消息处理函数的声明。 所有能够进行消息处理的类都是基于CCmdTarget类的,也就是说CCmdTarget类是所有可以进行消息处理类的父类。CCmdTarget类是MFC处理命令消息的基础和核心。 Mutex信号量来协调生产者线程和MOVE1线程;因为MOVE1线程和MOVE2线程共同使用临界资源BUFFER2,所以用Mutex1信号量来协调MOVE1线程和MOVE2线程,因为MOVE2线程和消费者线程共同使用临界资源BUFFER3,所以用Mutex3信号量来协调MOVE2线程和消费者线程。 4 详细设计 4.1 ThreadInfo结构体 typedef struct ThreadInfo{ CListBox *pList; }thread,*lpthread; 此结构体用来保存在线程建立时往线程中传送的参数信息(如该线程指定的操作控件),以供在本线程中使用。 4.2 线程操作函数 4.2.1 执行函数的声明 分别声明生产者、MOVE1、MOVE2、消费者函数,格式为:DWORD WINAPI threadFIFO(LPVOID lparam); //声明3个不同的生产者线程,主要区别是能分别输出该生产的字符是哪个生产者生产的。 DWORD WINAPI Productor1(LPVOID pthread) DWORD WINAPI Productor2(LPVOID pthread) DWORD WINAPI Productor3(LPVOID pthread) //声明MOVE1线程。 DWORD WINAPI Move1(LPVOID pthread) //声明MOVE2线程。 DWORD WINAPI Move2(LPVOID pthread) //声明3个不同的消费者线程,主要区别是能分别输出该消费的字符是哪个消费者消费的。 DWORD WINAPI Consumer1(LPVOID pthread) DWORD WINAPI Consumer2(LPVOID pthread) DWORD WINAPI Consumer3(LPVOID pthread) 4.2.2 定义12个线程 //3个生产者线程 hThread1=CreateThread(NULL,0,Productor1,thread1,0,ProducterID); hThread2=CreateThread(NULL,0,Productor2,thread1,0,ProducterID); hThread7=CreateThread(NULL,0,Productor3,thread1,0,ProducterID); //3个MOVE1线程 hThread5=CreateThread(NUL

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档