版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验线程的状态和转换实验目的调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增加挂起状态,加深对线程状态的理解。线程的状态和其转换过程线程控制块中的状态域
及线程状态的枚举定义typedef struct_THREAD{ ……
UCHARState;
//线程当前状态 ……
}THREAD;typedefenum_THREAD_STATE{ Zero, //线程状态转换过程中的中间状态 Ready, //就绪 Running, //运行 Waiting, //等待(阻塞) Terminated //结束}THREAD_STATE;线程处于运行、就绪、阻塞状态时
线程控制块的位置线程控制块都是从系统内存池中分配的!运行状态:全局变量PspCurrentThread指向处于运行状态线程的线程控制块。就绪状态:线程控制块在其优先级对应的就绪队列中。阻塞状态:线程控制块在同步对象的等待队列中。线程状态转换包括:线程控制块中状态域的变化,线程控制块位置的变化等。线程由阻塞状态进入就绪状态的源代码PTHREAD
PspWakeThread(
INPLIST_ENTRYWaitListHead,
INSTATUSWaitStatus
)
{
PTHREADThread; if(!ListIsEmpty(WaitListHead)){
Thread=CONTAINING_RECORD(WaitListHead->Next,THREAD,StateListEntry);
PspUnwaitThread(Thread);
PspReadyThread(Thread);
Thread->WaitStatus=WaitStatus; }else{ Thread=NULL;
} returnThread;
}VOIDPspUnwaitThread( INPTHREADThread ){ ASSERT(Waiting==Thread->State); ListRemoveEntry(&Thread->StateListEntry); Thread->State=Zero; if(STATUS_TIMEOUT==Thread->WaitStatus){ KeUnregisterTimer(&Thread->WaitTimer); }}VOIDPspReadyThread( PTHREADThread ){ ASSERT(NULL!=Thread); ASSERT(Zero==Thread->State||Running==Thread->State); // //将线程插入其优先级对应的就绪队列的队尾,并设置就绪位图中对应的位。
//最后将线程的状态修改为就绪状态。
// ListInsertTail(&PspReadyListHeads[Thread->Priority],&Thread->StateListEntry); BIT_SET(PspReadyBitmap,Thread->Priority); Thread->State=Ready;}线程由运行状态进入就绪状态的源代码PCONTEXTPspSelectNextThread( VOID ){ …… if(NULL!=PspCurrentThread&&Running==PspCurrentThread->State){ if(0!=PspReadyBitmap&&HighestPriority>PspCurrentThread->Priority){ ListInsertHead(&PspReadyListHeads[PspCurrentThread->Priority], &PspCurrentThread->StateListEntry); BIT_SET(PspReadyBitmap,PspCurrentThread->Priority); PspCurrentThread->State=Ready; } …… } ……}线程由就绪状态进入运行状态的源代码PCONTEXTPspSelectNextThread( VOID ){ …… PspCurrentThread=CONTAINING_RECORD(PspReadyListHeads[HighestPriority].Next, THREAD,StateListEntry); ObRefObject(PspCurrentThread);
PspUnreadyThread(PspCurrentThread); PspCurrentThread->State=Running; ……}VOIDPspUnreadyThread( PTHREADThread ){ ASSERT(NULL!=Thread&&Ready==Thread->State); ListRemoveEntry(&Thread->StateListEntry); if(ListIsEmpty(&PspReadyListHeads[Thread->Priority])){ BIT_CLEAR(PspReadyBitmap,Thread->Priority); } Thread->State=Zero;}线程由运行状态进入阻塞状态的源代码STATUSPspWait( INPLIST_ENTRYWaitListHead, INULONGMilliseconds ){ …… ListInsertTail(WaitListHead,&PspCurrentThread->StateListEntry); PspCurrentThread->State=Waiting; //当前线程进入等待状态后需要让出处理器(让权等待),执行线程调度。 PspThreadSchedule();
//zzZ... ……}为线程增加挂起状态命令:suspendThreadID和resumeThreadIDAPI函数:SuspendThread和ResumeThread内核函数:PsSuspendThread和PsResumeThread挂起线程的源代码LIST_ENTRYSuspendListHead={&SuspendListHead,&SuspendListHead};STATUSPsSuspendThread(INHANDLEhThread){ STATUSStatus; BOOLIntState; PTHREADThread; Status=ObRefObjectByHandle(hThread,PspThreadType,(PVOID*)&Thread); if(EOS_SUCCESS(Status)){ IntState=KeEnableInterrupts(FALSE); //关中断
if(Ready==Thread->State){ PspUnreadyThread(Thread); ListInsertTail(&SuspendListHead,&Thread->StateListEntry); Status=STATUS_SUCCESS; }else{ Status=STATUS_NOT_SUPPORTED; } KeEnableInterrupts(IntState); //开中断
ObDerefObject(Thread); } returnStatus;}恢复线程的源代码STATUSPsResumThread(INHANDLEhThread){ STATUSStatus; BOOLIntState; PTHREADThread; Status=ObRefObjectByHandle(hThread,PspThreadType,(PVOID*)&Thread); if(EOS_SUCCESS(Status)){ IntState=KeEnableInterrupts(FALSE); //关中断
if(Zero==Thread->State){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理专业护理运动疗法教学课件
- 护理人性化服务与护理实践
- 2026聘用制法警面试题及答案
- 2026陕西说课面试题目及答案
- 枫树上的喜鹊-课件-第一课时
- 2026社团会计面试题及答案大全
- 2026省属水利面试题目及答案
- 2026铁路稽查面试题及答案
- 可编程控制器技术应用课件 20PLC控制系统设计
- 2026网易秋招面试题及答案
- 血管活性药物静脉输注护理课件
- 饮料生产配方管理制度
- 输电线路大开挖基础施工方案
- 截肢手术配合
- 2024继电保护作业指导书
- 2023年中国国家话剧院招聘事业单位考试真题
- 5G工程师理论练习测试卷
- (完整word版)北京市住院医师规范化培训线上课程答案全科医学题库
- 浮法玻璃退火工艺演示文稿
- 宠物美容培训课件
- 2022更新国家开放大学电大专科《乡镇行政管理》期末题库及答案
评论
0/150
提交评论