// 全局变量,用于指示共享的资源是否在使用 BOOL g_fResourceInUse = FALSE; void Func1() { //等待访问资源 while(InterlockedExchange(&g_fResourceInUse, TRUE) == TRUE) Sleep(0); //访问刚占有的资源 //Access the resource. //我们不需要再访问的资源 InterlockedExchange(&g_fResourceInUse, FALSE); } 这是…
看到windows核心编程 第5章的最后一节,发现job lab例子程序不能在我的系统(win8下)正常运行,总是提示“进程在一个作业里”         用process explorer程序查看 于是我找到   例子程序源码的这段判断程序,注释后编译运行   终于进了程序的界面   可是我认为这不是一个好的解决方案   于是去看书的123页下面到124页上的那段话   果然在程序已经关联了作业对象   但是最后,书上说到,一个简单的解决方案是从命令行而不是windows资源管理器中启动调试器…
7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层的数据结构也会完整地记录在 Platform SDK文档中确实使人吃惊.不过如果查看该文档中的C O N T E X T结构,会看到下面这段文字: "C O N T E X T结构包含了特定处理器的寄存器数据.系统使用 C O N T E X T结构执行各种内部操作.目前,已经存在为 I n t e…
第7章 线程的调度.优先级和亲缘性 抢占式操作系统必须使用某种算法来确定哪些线程应该在何时调度和运行多长时间.本章将要介绍Microsoft Windows 98和Windows 2000使用的一些算法. 上一章介绍了每个线程是如何拥有一个上下文结构的, 这个结构维护在线程的内核对象中.这个上下文结构反映了线程上次运行时该线程的 C P U寄存器的状态.每隔2 0 m s左右,Wi n d o w s要查看当前存在的所有线程内核对象.在这些对象中,只有某些对象被视为可以调度的对象.Wi n d…
用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在一个线程读内存时要限制其他线程对此块内存进行写入. 线程之间的通信很重要,尤其是在以下两种情况下: 1:需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性. 2:一个线程需要通知其他线程某项任务已经完成. 线程同步包括许多方面,windows提供了许多基础设施使线程同步变得容易. 用户模式…
第6章 线程的基础知识 理解线程是非常关键的,因为每个进程至少需要一个线程.本章将更加详细地介绍线程的知识.尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用.还要介绍系统如何使用线程内核对象来管理线程.与进程内核对象一样,线程内核对象也拥有属性,我们将要观察许多用于查询和修改这些属性的函数.此外还要介绍可以在进程中创建和生成更多的线程时所用的函数. 第4章介绍了进程是由两个部分构成的,一个是进程内核对象,另一个是地址空间.同样,线程也是由两个部分组成的: • 一个是线程的内核对象,…
第5章 作 业 通常,必须将一组进程当作单个实体来处理.例如,当让 Microsoft Developer Studio为你创建一个应用程序项目时,它会生成 C l . e x e,C l . e x e则必须生成其他的进程(比如编译器的各个函数传递) .如果用户想要永远停止该应用程序的创建,那么 Developer Studio必须能够终止C l . e x e和它的所有子进程的运行.在 Wi n d o w s中解决这个简单(和常见的)的问题是极其困难的,因为Wi n d o w s并不维护…
每个线程都有一个CONTEXT结构,保存在线程内核对象中.大约每隔20ms windows就会查看所有当前存在的线程内核对象.并在可调度的线程内核对象中选择一个,将其保存在CONTEXT结构的值载入cpu寄存器.这被称为上下文切换.大约又过20ms  windows将当前cpu寄存器存回内核对象,线程被挂起.Windows再次检查内核对象,并在可调度的内核对象中选择一个进行调度.此过程不断重复直到系统关闭. Windows被称为抢占式多线程系统,系统可以在任何时刻停止一个线程而另行调度另外一个线…
上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了.首先要给大家介绍的是进程内核对象.进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构.操作系统内核通过它管理进程,也就是操作系统原理上介绍的进程控制块(PCB).举个例子,它就相当于每个学生都有的学籍,学校管理我们都是通过学籍,什么记过了,处分了,开除学籍了,都是在学籍上做文章.       进程一般被定义为一个正在运行的程序的一个实例,它由两部分组成:       1:内核对象,操作系统用它来管理…
第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27.1 原始输入线程 当系统初始化时,要建立一个特殊的线程,即原始输入线程(raw input thread,R I T).此外,系统还要建立一个队列,称为系统硬件输入队列(System hardware input queue, SHIQ).R I T和S H I Q构成系统硬件输入模型的核心. R…