- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
有关计算机专业论文精选
1问题描述
通过学习,学生已经熟悉“生产者-消费者”模型,知道各进程应该互斥地使用缓冲池,且生产者进程和消费者进程之间需要用信号量同步。生产者和消费者进程通过信号量实现同步和互斥的伪代码如表1所示。表1中,P操作实现信号量的申请,V操作实现信号量的释放。缓冲池是临界资源,用长度为n的数组buffer[]表示,每个元素buffer[i]都是一个缓冲区,用来存储生产者生产的产品。互斥量mutex保证各进程互斥地访问缓冲池,初始值为1。生产者和消费者分别用in和out来操作缓冲池中的各缓冲区,并通过信号量full和empty同步。full代表缓冲池中存有产品的缓冲区的个数,初始值为0;empty代表缓冲池中没有存放产品的缓冲区的个数,初始值为n。
2组织实施
为减少学生对教师的依赖,加大他们在实验中的参与度,培养他们的系统能力,我们把“生产者-消费者”实验的组织划分为三个阶段:课前布置任务、课内检查引导、课后收集反馈。
2.1课前布置任务为加大学生对实验的参与度,我们在实验课前向学生明确实验任务并提供相关API函数的简单说明,要求学生学习资料并思考“生产者-消费者”模型实现的方法。
2.1.1明确实验任务在理解“生产者-消费者”模型的基础上,利用多线程技术模拟实现一组生产者和消费者;并假设这些生产者和消费者等效,即:只要缓冲池未满,生产者就可将产品送入缓冲池;只要缓冲池非空,消费者就可以从中取产品进行消费。
2.1.2提供学习资料由于大多数学生在本次实验前未接触过多线程编程,因此我们向学生提供一些与伪代码中各操作相对应的WindowsAPI。“生产者-消费者”实验涉及到创建生产者与消费者、操作信号量及使用临界资源。我们整理了与之对应的三类函数供学生预习,分别是多线程操作函数、信号量操作函数和互斥量操作函数通过互斥量保证生产者和消费者对临界资源互斥访问。多线程操作函数包括创建线程的函数_beginthreadex和等待多个线程结束的函数WaitForMultipleObject。信号量操作函数包括创建信号量的函数CreateSemaphore、申请信号量的函数WaitForSingleObject和释放信号量的函数ReleaseSemaphore。互斥量操作函数包括创建互斥量的函数CreateMutex、申请互斥量的函数WaitForSingleObject和释放互斥量的函数ReleaseMutex。当生产者和消费者完成所有工作后,需要销毁线程、信号量和互斥量等资源。线程、信号量和互斥量都是内核级资源,用CloseHandle函数销毁。需要注意的是,我们只对上述函数进行简单说明,学生需要借助互联网等资源学习它们的具体使用方法。
2.1.3提出具体要求提供预习资料的同时要求学生思考:实现“生产者-消费者”模型应考虑哪些技术细节?
2.2课内检查引导与教师详细讲解实验原理、目的、步骤及注意事项,学生只需按部就班地操作不同,启发式教学法注重发挥学生在实验课上的主动性,积极引导学生思考并对学生的结论进行总结,从而完成实验。本阶段又可分为预习成果检查和总结引导两部分。
2.2.1预习成果检查实验课开始时我们通过提问检查学生的预习情况,重点考察他们对实验中可能会遇到的技术问题的思考。检查预习的好处在于:一方面,教师的监督可以强迫学生独立思考,减少学生对教师的依赖;另一方面,通过提问教师能够了解学生对实验的理解程度,有助于总结引导。
2.2.2总结引导根据经验,大部分学生会对实验中可能遇到的技术问题进行思考,但可能不够全面。因此,在听取学生对问题的回答后,应进行总结,并进一步启发学生。我们以共用缓冲池包含10个缓冲区的二个生产者和二个消费者为例,实现该“生产者-消费者”模型需要考虑以下三个技术细节。⑴该模型使用的数据结构;⑵程序的流程;⑶实现生产者和消费者的具体操作。以上三个技术细节的实现是本实验的关键。学生在课前已经对相关函数进行了预习,因此我们并不立即给出答案,而是启发学生基于预习和已有的编程知识,尝试解决这三个问题。问题一:由表1中伪代码可知,生产者和消费者之间通过信号量同步,并互斥地访问缓冲池。因此,信号量和临界区是实现该模型必不可少的数据结构。问题二:程序的流程在main函数中设定。具体可分为数据结构的初始化、创建多线程和资源回收。其中,资源的初始化及回收可以直接调用相关函数,较为复杂的是创建多线程。讲解创建多线程的方法时可以这样启发学生:每调用一次_beginthreadex函数可以创建一个线程用来模拟生产者或消费者,因此,创建多个生产者和消费者要多次调用_beginthreadex,这种重复执行相同的动作显然要用循
原创力文档


文档评论(0)