zoukankan      html  css  js  c++  java
  • 第七章 线程的调度、优先级和亲缘性(4)

    六、运用结构环境 环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方。 Windows实际上允许查看线程内核对象的内部情况,以便抓取它当前的一组 C P U寄存器。若要进行这项操作,只需要调用G e t T h r e a d C o n t e x t函数 BOOL GetThreadContext(HANDLE hThread , PCONTEXT pContext ); 指定一个CONTEXT结构,对某些标志(该结构的ContextFlags成员)进行初始化,指明想要收回哪些寄存器,并将该结构的地址传递给GetThreadContext。然后该函数将数据填入你要求的成员.调GetThreadContext之前,应该调用SuspendThread,否则,线程可能被调度,而且线程的环境可能与你收回的不同(一个线程实际上有两个环境。一个是用户方式,一个是内核方式)。它只能返回线程的用户方式环境。 BOOL SetThreadContext(HANDLE hThread, CONST CONTEXT *pContext); 将新寄存器值放回线程的内核对象中, 修改其环境的线程应该首先暂停,否则其结果将无法预测。调用SetThreadContext之前,必须再次对CONTEXT的ContextFlags成员进行初始化。 七、线程的优先级 每个线程都会被赋予一个从0(最低)到3 1(最高)的优先级号码。当系统确定将哪个线程分配给CPU时,先查看有无优先级为3 1的线程可以调度,如果有就将该线程赋予一个CPU。在该线程的时间片结束时,系统再查看是否还有另一个优先级为3 1的线程可以运行,如果有,则调度之。如果无则查看有无优先级为30的线程可调度,以此类推。 低优先级的线程在运行时系统发现一个高优先级的线程准备要运行,那么系统就会立即暂停低优先级线程的运行(即使它处于它的时间片中) ,并将CPU分配给高优先级线程,使它获得一个完整的时间片。 当系统引导时,它会创建一个特殊的线程,称为 0页线程。该线程被赋予优先级0,它是整个系统中唯一的一个在优先级0上运行的线程。当系统中没有任何线程需要执行操作时,0页线程负责将系统中的所有空闲R A M页面置0。
  • 相关阅读:
    GPS坐标转化距离(短距离模型公式)
    jquery ajax 同步异步的执行
    视频播放的基本原理
    [css或js控制图片自适应]
    asp.net中js和jquery调用ashx的不同方法分享,需要的朋友可以参考一下
    [转载]在网页中插入media,RealPlayer等控件
    数组的几种排序算法的实现(3)
    -- HTML标记大全参考手册[推荐]
    数组的几种排序算法的实现(2)
    数组的几种排序算法的实现(1)
  • 原文地址:https://www.cnblogs.com/dyufei/p/2573995.html
Copyright © 2011-2022 走看看