- 19
- 0
- 约7.56千字
- 约 16页
- 2017-07-09 发布于湖北
- 举报
实验二线程与同步 nachos02概要1
实验报告
2302010220不可不戒
实现Nachos的同步机制:锁和条件变量,并利用这些同步机制实现几个基础工具类
二.首先根据老师提供的文档,对必要的文件进行了理解后进行实验
实现锁机制和条件变量,并利用这些同步机制将实验一中所实现双向有序链表类修改成线程安全的
使用Thread::Sleep实现锁机制和条件变量
在每一个函数(操作)开始时先开中断,结束后在关中断。
锁Lock
Acquire()
申请锁
当锁lockValue=false,说明锁不可用,当前线程进入睡眠状态。
当锁lockValue=true,说明锁可用,当前线程获得该锁,继续运行。
Void Lock::Acquire()
{
//ASSERT(!isHeldByCurrentThread());
IntStatus oldLevel=interrupt-SetLevel(IntOff);
while(lockValue)//lock not available
{
queue-Append((void *)currentThread);
currentThread-Sleep();
}
lockValue=true;//lock available
owner=currentThread;//record the new owner of the lock
(void) interrupt-SetLevel(oldLevel);
}
Release()
释放锁(注意:只有拥有锁的线程才能释放锁)
lockValue=true
如果有其它线程等待该锁,将其中的一个唤醒,进入就绪态。
bool isHeldByCurrentThread()用于判定当前进程是否是锁的持有者。
void Lock::Release()
{
Thread *thread;
ASSERT(isHeldByCurrentThread());
IntStatus oldLevel=interrupt-SetLevel(IntOff);
thread=(Thread *)queue-Remove();
if(thread !=NULL)
scheduler-ReadyToRun(thread);
lockValue=false;
owner=NULL;
(void) interrupt-SetLevel(oldLevel);
}
2. 条件变量Condition
Wait、Signal以及BroadCast,所有的这些操作必须在当前线程获得一个锁的前提下而且所有对一个条件变量进行的操作必须建立在同一个锁的前提下
Wait()
线程等待条件变量
释放该锁
进入睡眠状态
重新申请该锁
void Condition::Wait(Lock* conditionLock)
{
ASSERT(conditionLock-isHeldByCurrentThread());
IntStatus oldLevel=interrupt-SetLevel(IntOff);
conditionLock-Release();
queue-Append((void *)currentThread);
currentThread-Sleep();
conditionLock-Acquire();
(void)interrupt-SetLevel(oldLevel);
}
Signal()
唤醒一个等待该条件变量的线程(如果存在的话)
void Condition::Signal(Lock* conditionLock)
{
Thread *thread;
ASSERT(conditionLock-isHeldByCurrentThread());
IntStatus oldLevel=interrupt-SetLevel(IntOff);
thread=(Thread *)queue-Remove();
您可能关注的文档
- 实验一嵌入式系统设计概要1.doc
- 实验七 端口聚合提供冗余备份链路概要1.doc
- 实验七 ENVI软件介绍概要1.doc
- 实验三 交换机基本配置及交换机端口配置概要1.doc
- 实验七网络编程概要1.doc
- 实验一 认识Matlab编程环境概要1.doc
- 实验三 图形用户界面设计(汽院含答案)概要1.doc
- 实验三 Java面向对象高级编程概要1.doc
- 实验三 导数 数学实验课件习题答案概要1.doc
- 实验三 电机驱动及转速测量实验(新板子)概要1.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
原创力文档

文档评论(0)