- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实验一体验nachos下的并发程序设计-Read.doc
实验二 线程与同步
1内容简述
本次实验的目的在于将nachos中的锁机制和条件变量的实现补充完整,并利用这些同步机制实现几个基础工具类。实验内容分三部分:实现锁机制和条件变量,并利用这些同步机制将实验一中所实现双向有序链表类修改成线程安全的;实现一个线程安全的表结构;实现一个大小受限的缓冲区(详细内容请看nachos-labs.pdf)。
2实验内容的几点说明
2.1实现锁机制和条件变量(60分)
2.1.1总体说明
这部分是本实验的重点,实际包含三个部分:第一部分要求使用Thread::Sleep实现锁机制和条件变量;第二部分要求使用Semaphore实现锁机制和条件变量;第三部分要求使用锁机制和条件变量将实验一里实现的双向有序链表修改成线程安全的,对第一、第二部分的实现应分别测试。
对锁机制和条件变量的实现,需要修改的文件是
nachos-3.4/code/threads/synch.h:class Lock和class Condition分别提供锁和条件变量的接口声明,其中的注释涉及它们的具体语义,应仔细阅读,并根据需要添加适当的数据成员。课本pp166有关于条件变量的说明,注意,实验要求采用Mesa语义,而非Hoare语义。
nachos-3.4/code/threads/synch.cc:你的实现应出现在其中,特别注意不要遗漏对方法isHeldByCurrentThread的实现。
可以阅读nachos-3.4/code/synchlist.cc和nachos-3.4/code/synchlist.h以加深对锁以及条件变量如何使用的理解。
条件变量一定要和某个特定的锁变量配合使用,任何进程在调用条件变量的相关方法(Wait,Signal和Broadcast)前都应先对相应锁实施加锁操作。你的程序在实现这些方法时必须做此判断(用isHeldByCurrentThread)。
在实现锁和条件变量的有关方法时应特别注意考虑各种异常情况,防止对这些方法的非法调用。对各种非法调用情况均应使用ASSERT检查。Nachos-labs.pdf的3.2.5节提供了其中的一些情况,请参考。
2.1.2用Thread::Sleep实现锁机制和条件变量
这部分实现主要参考Semaphore中Semaphore::P()和Semaphore::V()的实现(在synch.cc和synch.h中)。阅读../code/threads/list.h,../code/threads/list.cc,../code/machine/interrupt.h和../code/machine/interrupt.cc等文件也有帮助。
在必要的时候应关中断,关中断的方法可以参考Semaphore::P()。请注意考虑究竟什么时候才真正需要关中断!
阻塞进程应该挂到相应的阻塞队列中,不同的等待事件应对应不同的阻塞队列。因此你的Lock类和Condition类中应包含相应的队列首指针(请参考Semaphore)。
为了提交,这部分实验完成后,将synch.cc和synch.h分别保存为synch-sleep.cc和synch-sleep.h(见“3.1应提交的内容和应出现的位置”)
2.1.3用Semaphore实现锁机制和条件变量
不需要自行考虑关中断和阻塞队列维护等问题。
在用Semaphore实现条件变量时并不那么直接!这里,请特别注意Semaphore与条件变量的区别:如果在调用Semaphore::P()前调用Semaphore::V(),则V操作的效果将积累下来;而如果在调用Condition::Wait()前调用Condition::Signal(),则Signal操作的效果将不积累。
为了提交,这部分实验完成后,将synch.cc和synch.h分别保存为synch-sem.cc和synch-sem.h(见“3.1应提交的内容和应出现的位置”)
2.1.4用锁机制和条件变量修改双向有序链表
在实验一里你曾经在nachos系统中运行自己编写的链表程序演示一些并发错误,其原因是测试程序未考虑互斥。现在请根据所实现的锁和条件变量机制重写测试文件threadtest.cc,并确保修改后的多线程并发程序是正确互斥的。
可以参考nachos-3.4/code/threads/synchlist.cc和nachos-3.4/code/threads/synchlist.h
再次注意:条件变量应和锁配合使用。在使用过程中应注意,不能出现一个条件变量与两个不同的锁对应的情况!
2.2实现一个线程安全的表结构(20分)
52/Experiments/Resources/Tools/nachos/2-3aux.tar中包含了这部分实验所需要头文件Table.h
您可能关注的文档
- 基于水平集的海岛礁提取-广东省测绘学会.PDF
- 基于深层注意力的LSTM的特定主题情感分析-计算机应用研究.PDF
- 金属和塑钢门窗构造-山东英才学院.ppt
- 金智云校园使用指南.PDF
- 基于激光跟踪仪标定五轴数控加工中心主轴-中国科学院长春光学精密.PDF
- 基于热力学模型的烧结环冷机漏风率测算方法研究-热能动力工程.PDF
- 基于物流AGV的货到人订单拣选系统任务调度研究.PDF
- 基于犑犃犁犕犐荦并行框架的2.5维粒子模拟程序荦犈-强激光与粒子束.PDF
- 基于犔犪犫犞犐犈犠的天然气水合物电-声联合探测-计算机测量与控制.PDF
- 钒铬萃取分离过程中界面乳化物的形成行为-ResearchGate.PDF
文档评论(0)