操作系统课程实验指导书_第1页
操作系统课程实验指导书_第2页
操作系统课程实验指导书_第3页
操作系统课程实验指导书_第4页
操作系统课程实验指导书_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程实验指导书适用专业:计算机类相关专业* 编计算机学院2011年4月目录操作系统课程实验指导书1目录2一、课程实验基本目的与可能收获3二、课程实验基本要求4三、课程实验项目51、项目一: Windows进程管理管理工具;设备管理工具;磁盘、目录和文件管理工具的使用(2学时)52、项目二:模拟实现进程互斥和同步的信号量机制(6学时)53、项目三:模拟实现进程调度算法(4学时)84、项目四:模拟实现磁盘调度算法(4学时)9四、课程实验过程与具体要求11五、课程实验交付成果说明12六、考核方式及成绩评定方法14七、主要参考文献与网址15附录A 部分课程实验题目参考源程序16A.1 读者写者

2、问题参考源程序16A.2 进程调度算法参考源程序25A.3 磁盘调度算法参考源程序42附录B软件开发文档指南60一、课程实验基本目的与可能收获1、学习操作系统要求理论与实践相结合,本门实验课程是对操作系统课堂教学的一个重要补充,与理论学习起着相辅相成的作用,是实施操作系统教学的一个重要组成部分。通过本实验课的实践学习,可以增强本专业的学生对系统实现的认识。对加深理解和掌握操作系统相关原理有重要帮助。进一步提高学生综合运用所学专业知识分析和解决实际应用问题的能力,提高实际动手编程的能力,为日后从事计算机软硬件开发工作打下坚实基础。2、通过课程实验的实践及其前后的准备与总结,复习、领会、巩固和运用

3、课堂上所学的知识和方法,提升分析问题,解决问题的实际能力。3、使学生通过开发实践,了解项目管理、团队合作、文档编写、口头与书面表达的重要性。使每个学生了解软件工具与环境对于项目开发的重要性,并且重点深入掌握好一、两种较新或较流行的软件工具或计算机应用技术、技能。4、通过“稍大的”富有挑战性的软件实验项目开发实践,提高学生的自学能力、书面与口头表达能力、创造能力和与团队其他成员交往和协作开发软件的能力,提高学生今后参与开发稍大规模实际软件项目和探索未知领域的能力和自信心。二、课程实验基本要求1、深入而直观地理解操作系统使用的各类算法,其中常见的重要算法主要包括: 经典实现进程同步的信号量算法。

4、处理机调度算法。 常见的磁盘调度算法。2、实验方式与基本要求:实验方式:上机,分析,设计,测试。基本要求:采取课内上机和业余上机相结合的方式进行,在规定时间内进行程序检查和实验报告。 学生应当独立地完成自己所分配到的课题任务,严禁抄袭或拷贝他人的成果。 学生能使用面向对象语言(如:Java、VC+、VB、Delphi等)完成各个实验,并且程序正确,功能完整,界面友好。 学生在上机做实验前,应事先将程序、调试数据、上机操作顺序等准备好。 在实验后,写出实验报告,对需要完成的任务、程序体系结构和模块结构设计、采用的调试数据、上机操作过程、实验过程遇到的问题、如何解决遇到的问题、最后实验的成果等内容

5、进行描述。三、课程实验项目1、项目一: Windows进程管理管理工具;设备管理工具;磁盘、目录和文件管理工具的使用(2学时)、实验目的a、熟悉Windows进程管理管理工具;设备管理工具;磁盘、目录和文件管理工具的使用。、实验内容a、Windows任务管理器、资源管理器、设备管理器、系统管理工具的使用。、实验要求a、实践操作。、运行结果、提示、分析与讨论a、如何进行操作系统系统的优化设置?、参考代码2、项目二:模拟实现进程互斥和同步的信号量机制(6学时)、实验目的a、掌握进程并发执行的原理,及其所引起的同步、互斥问题。观察、体会操作系统的进程互斥和同步管理方法,并通过一个简单的进程互斥和同步

6、模拟程序的实现,加深对互斥和同步算法的理解。b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。、实验内容分别用信号量来模拟实现读者优先和写者优先的读者-写者问题。(实现其中之一)。信号量实现进程的互斥和同步。用信号量来模拟实现读、写进程间的互斥。设置多个读进程,例如:ABC和多个写进程,例如:DEF,由进程间互斥可以知道,哪方进程先进入,资源就由谁占用。、实验要求a、使用模块化设计思想来设计。b、给出算法的流程图或伪码说明。c、学生可按照自身条件,随意选择采用的算法,用C语言编写出程序,实现使用信号量的互斥和同步。、运行结果a、显示进程的运行轨迹和执行先后顺序。、提示在Window

7、s环境下,创建一个包含n 个线程的控制台进程。用这n 个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求,进行读写操作。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。读者-写者问题的读写操作限制:1)写-写互斥;2)读-写互斥;3)读-读允许;读者优先的附加限制:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提

8、示信息,以确信所有处理都遵守相应的读写操作限制。测试数据文件格式:测试数据文件包括n 行测试数据,分别描述创建的n 个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,各字段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R 表示读者是,W 表示写者。第三字段为一个正数,表示读写操作的开始时间。线程创建后,延时相应时间(单位为秒)后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。下面是一个测试数据文件的例子:1 R 3 52

9、W 4 53 R 5 24 R 6 55 W 5.1 3与实验相关的API 介绍线程控制:CreateThread 完成线程创建,在调用进程的地址空间上创建一个线程,以执行指定的函数;它的返回值为所创建线程的句柄。HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, / SDDWORD dwStackSize, / initial stack sizeLPTHREAD_START_ROUTINE lpStartAddress, / threadfunctionLPVOID lpParameter, / thread argu

10、mentDWORD dwCreationFlags, / creation optionLPDWORD lpThreadId / thread identifier);ExitThread 用于结束当前线程。VOID ExitThread(DWORD dwExitCode / exit code for this thread);Sleep 可在指定的时间内挂起当前线程。VOID Sleep(DWORD dwMilliseconds / sleep time);信号量控制:CreateMutex 创建一个互斥对象,返回对象句柄;HANDLE CreateMutex(LPSECURITY_ATT

11、RIBUTES lpMutexAttributes, / SDBOOL bInitialOwner, / initial ownerLPCTSTR lpName / object name);OpenMutex 打开并返回一个已存在的互斥对象句柄,用于后续访问;HANDLE OpenMutex(DWORD dwDesiredAccess, / accessBOOL bInheritHandle, / inheritance optionLPCTSTR lpName / object name);ReleaseMutex 释放对互斥对象的占用,使之成为可用。BOOL ReleaseMutex(H

12、ANDLE hMutex / handle to mutex);WaitForSingleObject 可在指定的时间内等待指定对象为可用状态;DWORD WaitForSingleObject(HANDLE hHandle, / handle to objectDWORD dwMilliseconds / time-out interval);、分析与讨论a、如何理解“算法+数据结构=程序设计”?b、如何理解“数据结构始终是为实现功能服务的”?、参考代码参看:附录A13、项目三:模拟实现进程调度算法(4学时)、实验目的a、进程调度是处理机管理的核心内容。观察、体会操作系统的进程调度方法,并通

13、过一个简单的进程调度模拟程序的实现,加深对进程控制块、进程队列、进程调度算法,进程切换的理解,并体会和了解各种调度算法的具体实施办法。b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。、实验内容a、设计进程控制块PCB表结构,模拟实现进程调度算法:FIFO,静态优先级调度,时间片轮转调度,短进程优先调度算法,多级反馈队列调度。(实现其中之一个以上)。b、编写一个进程调度程序模拟程序。模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。c、由用户输入(可通过文件输入)进程名、进程状态、进程运行时间和进程优先级等数据。、实验要求a、使用模块化设计思想来设计。b、给出主函数和各个算

14、法函数的流程图。c、学生可按照自身条件,随意选择采用的算法,(例如:采用冒泡法编写程序,实现短进程优先调度的算法)。d、进程调度程序模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。、运行结果a、给出进程的调度模拟操作排序结果。、提示a、每个进程可有三个状态,并假设初始状态为就绪状态。b、为了便于处理,程序中的进程运行时间以纳秒为单位计算。C、各进程的优先级或轮转时间数以及进程需运行的纳秒数的初始值均由用户给定。d、在优先级算法中,采用静态优先级。在时间片轮转算法中,采用可变时间片,由用户给定。e、对于遇到优先级一致的情况,采用FIFO策略解决。f、输入:进程流文件(文本文件),其中存

15、储的是一系列要执行的进程,每个进程包括四个数据项:进程名 进程状态(1就绪 2等待 3运行) 所需时间 优先级(0级最高)。 g、输出:进程执行流 等待时间 平均等待时间。、分析与讨论a、各种进程调度算法的异同?b、如何理解“算法+数据结构=程序设计”?c、如何理解“数据结构始终是为实现功能服务的”?、参考代码参看:附录A24、项目四:模拟实现磁盘调度算法(4学时)、实验目的a、观察、体会操作系统的磁盘调度方法,并通过一个简单的磁盘调度模拟程序的实现,加深对磁盘调度的理解。b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。、实验内容a、模拟实现磁盘调度算法:FCFS,最短寻道优先,

16、电梯算法(实现其中之一种以上)。b、磁道请求服务顺序由用户输入(可通过从指定的文本文件(TXT文件)中取出)。、实验要求a、使用模块化设计思想来设计。b、给出主函数和各个算法函数的流程图。c、学生可按照自身条件,随意选择采用的算法。 、运行结果a、给出磁盘调度算法模拟程序对进程寻道请求的排序结果。输出:第一列:磁道的服务顺序;第二列:移动的磁道数;最后计算出总移动磁道数、平均移动磁道数。、提示参看:附录A3、分析与讨论a、各种磁盘调度算法的异同?b、如何理解“算法+数据结构=程序设计”?c、如何理解“数据结构始终是为实现功能服务的”?、参考代码参看:附录A3四、课程实验过程与具体要求1、学习研

17、究课程实验指导书。2、确定目标、初步方案,准备、试用开发环境与工具。确定开发目标及初步方案;选择、准备、试用开发平台、开发设计工具及其他有关工具。3、学习与搜集素材,借阅、购置必要的书籍与材料。根据自己承担的任务利用各种途径(图书馆、因特网、书店、同学亲友等)进行针对性的学习并收集相关素材,包括精选、购置必要的书籍。4、各阶段的开发工作。开发应分阶段进行,具体安排自定。5、做好个人的开发记录、总结,做好同学之间的交流与互助。各个开发小组及其每个成员可以互相研讨、帮助,但必须独立完成自己承担的开发任务与文档编制任务,不得抄袭他人成果。每个小组由小组长建立项目开发记录本(或开发日志)(不少于20页

18、),每周至少做一次记录,包括小组会议记录,小组记录本要保存好以供老师检查。建议每个小组成员也建立自己个人的开发记录或日志。记录的内容可以包括:个人在小组中承担任务、计划与进度;相关学科与软件工具学习内容摘要与存在问题、难点;好的创意与建议;开发或学习心得;文档草稿;重要信息与线索记录等。这样做可以有助于项目开发工作和自己的学习和进步,也有助于最后完成个人的课程实验报告。五、课程实验交付成果说明1、要求:A、书面材料(1)个人报告(必交): 每个学生提交个人课程实验报告 (手写(运行界面可抓图),不少于5页),交给组长。由组长连同小组打印报告一并按时交给老师。(2)小组报告(可选): 课程实验小

19、组报告(A4打印稿,不少于10页,报告大纲由组长起草,报告要经过全组讨论,由各个成员提供素材)。(3)小组项目开发记录本(可选):(含小组进行课程实验的活动日志与会议记录)。B、软件与电子文档(1)个人电子文档(必交):把含个人完成的文档交给小组负责保管文档的角色 (平时组长安排的计算机的硬盘和电子邮箱中,最后保存在不止一台计算机中)。个人U盘和电子邮箱中应当包含个人完成的开发源代码、文档和个人课程实验报告的电子文档。(2)小组项目电子文档(必交):小组平时把运行系统的文档保存在组长安排的计算机硬盘小组项目专用目录中。完成项目后,把小组项目课程实验报告、可运行程序、源代码、相关文档连同各个小组

20、成员的文档分别复制到在小组项目专用目录下不同的子目录以及每个成员的子目录中,待老师审查、验收。注1、参加课程实验的小组、个人建立的文档建立目录时按照如下统一命名规则实例建立目录名,“班级子目录名/小组子目录名/个人子目录名”,比如:“_s/G1张三/C_ 9李四”表示:“2004级计算机科学与技术专业软件班/第1小组(组长张三)/角色C,李四,学号:9”。2、正文格式:每个实验项目书写一份实验报告。除最后一个项目外,实验报告在下一个项目开始时上交。最后一个项目实验报告在全部实验结束后一周内上交。实验报告的书写要求如下:封面按以下格式书写:(居中)操作系统课程实验(第 * 次)实验课题:姓 名:

21、学 号:年级班级:教学班级:专业方向:同组人:指导教师:实验时间:注:专业方向包括专业名称和自己所选方向名称;实验时间如果是两次以上,写明起止时间。报告内容:可按以下顺序书写:1、实验名称;2、实验目的和要求;3、实验的软硬件环境;4、实验内容及实验步骤;5、实验原始记录;(1)问题描述。包括此问题的理论和实际两方面。(2)解决方案。包括:软硬件选择的理论与实际依据、使用算法、程序语言及不同语言可能对问题解决的影响。(3)解决方案的流程图、主要算法的描述与具体实现的说明。(4)具体的解决实例。包括:实际完成的程序的基本结构、程序运行结果等等。6、实验结果分析(包括有何特点、存在的问题、改进意见

22、等),写出心得与体会(有何感想,学到了什么?)。六、考核方式及成绩评定方法1、考核方式:根据学生平时的表现态度、完成实验的情况、实验报告的完成情况、综合上机检查情况等给出每个学生的实验成绩。2、成绩评定方法:实验完成后,学生必须将所有资料交教师验收。包括:程序代码说明及测试报告。然后,学生必须按规定的格式撰写实验报告,交教师审阅和评定成绩。实验报告的成绩评定实行优秀、良好、中等、及格和不及格五个等级。实验报告评分原则表报告要求内容比重评分原则不给分及格中等良好优秀1问题描述5%没有有,但不完整基本正确描述正确描述准确2解决方案10%没有有,但不完整基本可行方案良好很有说服力3解决方案的流程图、

23、主要算法的描述与具体实现的说明20%没有有,但不完整基本正确,但不够清晰正确,清晰正确,清晰,且让人感觉良好4具体的解决实例60%没有有,但不完整基本完整完整让人感觉有价值,并可实际演示。5其他5%包括是否按时完成 ,报告格式,字迹,语言等等各次实验分数之和为总评实验成绩。优秀人数一般不得超过总人数的20%。不及格者不能得到相应的学分,需重做实验,经考核及格后方可取得相应学分。实验成绩是否折算计入期末总评成绩,以及具体折算办法,由开课同期的学校相关文件规定。七、主要参考文献与网址1 计算机操作系统(第三版),汤小丹等,西安电子科技大学出版社, 2007年5月2 操作系统习题解答与实验指导,王煜

24、、张明、刘振鹏 ,高等教育出版社, 2004年12月3 操作系统原理实验,周苏、金海溶、李洁、科学出版社, 2003年12月4 操作系统教程题解与实验指导,孟静,高等教育出版社, 2002年6月5 操作系统教程原理和实例分析,孟静,高等教育出版社, 2001年9月6 VC+深入详解,孙鑫、余安萍,电子工业出版社,2006年7 VC+程序设计解析与训练,祁云嵩,华东理工大学出版社,2005年8 谭浩强,张基温C/C+程序设计教程M北京:高等教育出版社2002年9参考网站的网址:/quickstart/htt

25、p://net/vstudio/// 源码网/ 中国源码中心/ 中国JAVA俱乐部JDK (Java开发工具包)及JDK文档下载网址/technetwork/java/javase/overview/index.html附录A 部分课程实验题目参考源程序A.1 读者写者问题参考源程序/* Source

26、File Name : LGY_Sigal_RW.cpp * Project Name: LGY_Sigal_RW * Engineer: 赖国勇 * Date Generated: 2010-11-04 * Last Revision Date: 2011-04-11 * Brief Description: * 、实验目的 * a、掌握进程并发执行的原理,及其所引起的同步、互斥问题。观察、体会操作系统的进程互斥和同步管理方法,*并通过一个简单的进程互斥和同步模拟程序的实现,加深对互斥和同步算法的理解。 * b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。 * 、实验内容 *a

27、、分别用信号量来模拟实现读者优先和写者优先的读者-写者问题。(实现其中之一)。 * b、信号量实现进程的互斥和同步。 *c、用信号量来模拟实现读、写进程间的互斥。 *d、设置多个读进程,例如:ABC和多个写进程,例如:DEF,由进程间互斥可以知道,哪方进程先进入, *资源就由谁占用。 *、实验要求 * a、使用模块化设计思想来设计。 * b、给出主函数和各个算法函数的流程图或伪码说明。 * c、学生可按照自身条件,随意选择采用的算法,用C语言编写出程序,实现使用信号量的互斥和同步。 *、运行结果 * a、显示进程的运行轨迹和执行先后顺序。 *、提示 *在Windows环境下,生成一个包含n 个

28、线程的控制台进程。用这n 个线程来表示n个读者或写者。 *每个线程按相应测试数据文件的要求,进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。* *VC+6.0调试通过 项目类型:Win32 Console Application * * */#include #include #include #include #include #include #define MAX_PERSON 100/并发线程的最大数量#define READER 0#define WRITER 1#define END -1#define R READER#define W WRITERtype

29、def struct _Person/线程结构体定义 HANDLE m_hThread;/线程句柄 int m_nType;/线程类型 int m_nStartTime;/线程开始时间 int m_nRunTime;/线程运行时间 int m_nID;/线程IDPerson;Person g_PersonsMAX_PERSON;/线程结构体数组int g_NumPerson = 0;/线程数量long g_CurrentTime= 0;/当前时间int g_PersonLists = /6个给定的线程 1, R, 5, 5,2, W, 4, 5, 3, R, 2, 2, 4, R, 1, 5,

30、5, W, 4, 3,6, R, 7, 7,END,;intg_NumOfReading = 0;/读者数量intg_NumOfWriting=0;/写者数量HANDLE g_hR_R_Mutex;/读者_读者互斥对象的句柄HANDLE g_hW_R_Mutex;/写者_读者互斥对象的句柄HANDLE g_hW_W_Mutex;/写者_写者互斥对象的句柄void CheckPersonList(int *pPersonList);/遍历线程结构体数组,生成线程bool CreateReader(int iStartTime,int iRunTime);/生成读者线程bool CreateWri

31、ter(int iStartTime,int iRunTime);/生成写者线程DWORD WINAPI ReaderProc(LPVOID lpParam);/指定读者线程执行的功能函数DWORD WINAPI WriterProc(LPVOID lpParam);/指定写者线程执行的功能函数int main() g_hR_R_Mutex = CreateMutex(NULL,FALSE,NULL);/生成读者_读者互斥对象,返回句柄 g_hW_R_Mutex = CreateMutex(NULL,FALSE,NULL);/生成写者_读者互斥对象,返回句柄 g_hW_W_Mutex = Cr

32、eateMutex(NULL,FALSE,NULL);/生成写者_写者互斥对象,返回句柄/输出线程结构体数组printf(ng_PersonLists = n);printf(序号 类型 开始时间 运行时间n);printf(1, R, 5, 5,n);printf(2, W, 4, 5,n);printf(3, R, 2, 2,n);printf(4, R, 1, 5,n);printf(5, W, 4, 3,n);printf(6, R, 7, 7,n);printf(END,n);printf(nn);g_CurrentTime = 0;/当前时间清零while(true) printf

33、(当前时间 CurrentTime = %dnn,g_CurrentTime); CheckPersonList(g_PersonLists);/遍历线程结构体数组,生成线程 g_CurrentTime+;/当前时间+1 Sleep(300); return 0;/int main()void CheckPersonList(int *pPersonLists)/遍历线程结构体数组,生成线程 int i=0; int *pList = pPersonLists; /指向线程结构体数组的指针 bool Ret; while(pList0 != END) if(pList2 = g_Current

34、Time)/线程开始时间等于当前时间 switch(pList1)/判别线程的类型 case R: Ret = CreateReader(pList2,pList3);/生成读者线程 break; case W: Ret = CreateWriter(pList2,pList3);/生成写者线程 break; if(!Ret) printf(生成线程 %d 失败n,pList0); pList += 4; / 移动至一个线程的数据 /void CheckPersonList(int *pPersonLists)DWORD WINAPI ReaderProc(LPVOID lpParam)/指定

35、读者线程执行的功能函数 if(g_NumOfWriting=1)/现在有一个以上写者正在工作WaitForSingleObject(g_hW_R_Mutex,INFINITE);/用写者_读者互斥对象的句柄实现互斥ReleaseMutex(g_hW_R_Mutex);/释放写者_读者互斥对象的句柄Person *pPerson = (Person*)lpParam; /指向线程结构体的指针 printf(Reader %d 正在请求使用共享缓冲区.n,pPerson-m_nID); WaitForSingleObject(g_hR_R_Mutex,INFINITE);/用读者_读者互斥对象的句

36、柄实现互斥,以修改g_NumOfReading if(g_NumOfReading =0)/本线程是第一个读者 WaitForSingleObject(g_hW_R_Mutex,INFINITE);/用写者_读者互斥对象的句柄实现互斥 g_NumOfReading+;/读者数量+1 ReleaseMutex(g_hR_R_Mutex);/释放读者_读者互斥对象的句柄 printf(Reader %d 请求成功n,pPerson-m_nID); / 修改读者的实际启动时间 pPerson-m_nStartTime = g_CurrentTime; /当前时间 printf(Reader %d 正

37、在读共享缓冲区.n,pPerson-m_nID); while(g_CurrentTime m_nStartTime + pPerson-m_nRunTime) / . 执行读操作 printf(Reader %d 正在退出.n,pPerson-m_nID); WaitForSingleObject(g_hR_R_Mutex,INFINITE);/用读者_读者互斥对象的句柄实现互斥,以修改g_NumOfReading g_NumOfReading-;/读者数量-1 if(g_NumOfReading = 0) /本线程是最后一个读者ReleaseMutex(g_hW_R_Mutex);/释放写

38、者_读者互斥对象的句柄 ReleaseMutex(g_hR_R_Mutex);/释放读者_读者互斥对象的句柄 ExitThread(0); return 0;/DWORD WINAPI ReaderProc(LPVOID lpParam)DWORD WINAPI WriterProc(LPVOID lpParam)/指定写者线程执行的功能函数WaitForSingleObject(g_hW_W_Mutex,INFINITE);/用写者_写者互斥对象的句柄实现互斥,以修改g_NumOfWritingg_NumOfWriting+;/写者数量+1ReleaseMutex(g_hW_W_Mutex)

39、;/释放写者_写者互斥对象的句柄WaitForSingleObject(g_hW_R_Mutex,INFINITE);/用读者_读者互斥对象的句柄实现互斥Person *pPerson = (Person*)lpParam;/指向线程结构体的指针 / 修改写者的实际启动时间 pPerson-m_nStartTime = g_CurrentTime; printf(Writer %d 正在写共享缓冲区.n,pPerson-m_nID); while(g_CurrentTime m_nStartTime + pPerson-m_nRunTime) / . 执行写操作 printf(Writer %

40、d 正在退出.n,pPerson-m_nID);WaitForSingleObject(g_hW_W_Mutex,INFINITE);/用写者_写者互斥对象的句柄实现互斥,以修改g_NumOfWritingg_NumOfWriting-;/写者数量-1ReleaseMutex(g_hW_W_Mutex);/释放写者_写者互斥对象的句柄ExitThread(0); return 0;/DWORD WINAPI WriterProc(LPVOID lpParam)bool CreateReader(int iStartTime,int iRunTime)/生成读者线程 DWORD dwThread

41、ID; if(g_NumPerson = MAX_PERSON)/线程数量超过最大限度 return false; Person *pPerson = &g_Personsg_NumPerson;/指向线程结构体数组的指针 pPerson-m_nID = g_NumPerson;/线程ID赋值为其当前数量 pPerson-m_nStartTime = iStartTime; pPerson-m_nRunTime = iRunTime; pPerson-m_nType = READER; g_NumPerson+;/线程数量+1 / 生成一个新的读者线程 pPerson-m_hThread = CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID); if(pPerson-m_hThread = NULL) return false; return true;/bool CreateReader

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论