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。
  • 相关阅读:
    python调用c++动态库报错
    Python自动化测试常用库整理
    Linux kswapd0 进程CPU占用过高快速处理方法
    Linux安装jdk8及环境变量配置
    免费的网站安全检查和恶意软件扫描程序
    【Java】对象的创建、初始化和使用
    【Java】数组的创建、遍历和复制
    【Java】Java 语言中流程控制语句(分支语句、循环语句、转移语句)的一些新特性
    【Java】Java 语言中操作符的一些新特性
    【Java】常量与变量(局部变量、成员变量)
  • 原文地址:https://www.cnblogs.com/dyufei/p/2573995.html
Copyright © 2011-2022 走看看