网站大量收购闲置独家精品文档,联系QQ:2885784924

实验二线程与同步-Read.PDF

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

实验二 线程与同步 小组成员与分工 姓名 学号 分工 崔 桃 查阅文档,编写部分代码 黄长泽 报告文档编写,编写部分代码 蒋益元 主要代码编写 一.实验内容 本次实验的目的在于将 nachos 中的锁机制和条件变量的实现补充完整,并利用这些同 步机制实现几个基础工具类。 实验内容分三部分: 1. 实现锁机制和条件变量,并利用这些同步机制将实验一中所实现双向有序链表类 修改成线程安全的; 2. 实现一个线程安全的表结构; 3. 实现一个大小受限的缓冲区(详细内容请看 nachos-labs.pdf )。 二.实现方案 1. 问题分析 1.1 锁机制和条件变量的实现 这部分实现主要参考 Semaphore 中 Semaphore::P()和 Semaphore::V()的实现。 第一部分要求使用 Thread::Sleep 实现锁机制和条件变量;第二部分要求使用 Semaphore 实现锁机制和条件变量; (1)使用 Thread::Sleep 实现锁机制和条件变量:主要用 Thread::Sleep 来实现阻塞, Lock::Acquire()参考 Semaphore 中 Semaphore::P(),关中断,判断当前锁是否可用(在锁类 中加一状态变量 enum LockStatus { Free, Busy },如果当前状态为 Free 则可用,为 Busy 则不可用)可用继续执行,并改变锁状态,不可用则调用 Thread::Sleep 将当前线程阻塞。 Lock::Release()参考 Semaphore 中 Semaphore::V(),由于只有拥有锁的线程才能释放锁,所 以先要调用 isHeldByCurrentThread()进行判断,为当前线程拥有则继续执行,关中断,从 阻塞对列中选取一线程加到就绪队列中。 Condition::Wait(Lock* conditionLock) 参考有关于条件变量的说明,(注意,实验要求采 用 Mesa 语义,而非 Hoare 语义。)条件变量与锁结合使用,先获得锁,再对条件变量进行 判断,符合则继续执行,否则调用 Wait();(在 Wait()中要实现的是释放锁,将当前线 程调用 Thread::Sleep 阻塞。当条件改变,若该线程被激活则再次请求获得锁)继续进行条 件判断,直到条件满足,进入临界区,执行完临界区代码后在释放锁。 Condition::Signal(Lock* conditionLock) 参考有关于条件变量的说明,当条件变量改变后, 调用 Signal(),用来释放阻塞在条件变量的线程序,(在 Signal()要实现饿主要是从阻 塞对列中释放一线程,将其加到锁的阻塞队列上。 Condition::Broadcast(Lock* conditionLock)与 Condition::Signal(Lock* conditionLock) 的实现相似,不同在于 Signal()只释放一个阻塞线程,而 Broadcast()释放所有阻塞在 条件变量的线程。 (2 )用 Semaphore 实现锁机制和条件变量: Lock::Acquire()用 Semaphore 来实现锁,由于锁类似于二元信号量,所以在锁类中定义一 初始值为 2 的 Semaphore,在Acquire()中要实现的是调用 Semaphore::P()再改变锁的状态。 Lock::Release()要实现的是先要调用 isHeldByCurrentThread()进行判断,为当前线程拥有 则继续执行,再调用 Semaphore::V()再改变锁的状态。 Condition::Wait(Lock* conditionLock) 参考有关于条件变量的说明,(注意,实验要求采 用 Mesa 语义,而非 Hoare 语义。)条件变量与锁结合使用,先获得锁,再对条件变量进行

文档评论(0)

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

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

1亿VIP精品文档

相关文档