




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验线程的状态和转换实验目的调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增加挂起状态,加深对线程状态的理解。线程的状态和其转换过程线程控制块中的状态域
及线程状态的枚举定义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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校教务管理流程的优化策略
- 棋类智慧社行业深度调研及发展战略咨询报告
- 传统建筑文化在中学地理教育中的体现
- 如何成为专业制作者
- 培养孩子良好学习习惯的快乐方法
- 160万只空气净化滤芯项目可行性研究报告模板-立项备案
- 阅读教育工作部署
- 宣传防疫知识
- 2025年中国微电脑加油系统数据监测报告
- 2025年中国带柄椭圆碟数据监测报告
- PDCA降低I类切口感染发生率
- 2023河南专升本英语真题及答案
- 非酒精性脂肪肝 课件
- 食品生产企业落实主体责任培训
- 药铺微信宣传方案
- 外研版(一起)英语二年级下册 Module4Unit2 What’s he doing 教案
- 北京属医院医疗合作管理暂行办法
- 碎石石灰土垫层施工方案完整
- 三级妇幼保健院评审标准实施细则(保健院正确发展方向)
- 查对制度操作流程表1页
- 剪板机液压系统概要PPT课件
评论
0/150
提交评论