Windows核心编程:第12章 纤程】的更多相关文章

Github https://github.com/gongluck/Windows-Core-Program.git //第12章 纤程.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第12章 纤程.h" LPVOID g_Covert = nullptr; DWORD g_index = 0; VOID WINAPI FiberFun(LPVOID lpFiberParameter) { //纤程参数 LPV…
// 全局变量,用于指示共享的资源是否在使用 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资源管理器中启动调试器…
12.1 纤程对象的介绍 (1)纤程与线程的比较 比较 线程(Thread) 纤程(Fiber) 实现方式 是个内核对象 在用户模式中实现的一种轻量级的线程,是比线程更小的调度单位. 调度方式 由Microsoft定义的算法来调度,操作系统对线程了如指掌.内核对线程的调度是抢占式的. 由我们自己调用SwitchToFiber来调度,内核对纤程一无所知.线程一次只能执行一个纤程代码,纤程间的调度不是抢占式的. 备注 ①一个线程可以包含一个或多个纤程.操作系统随时可能夺走纤程所在线程的运行.当线程被…
第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进程的各种不同的属性,以及查询和修改这些属性所用的若干个函数.还要讲述创建或生成系统中的辅助进程所用的函数.当然,如果不深入说明如何来结束进程的运行,那么这样的介绍肯定是不完整的.现在就来介绍进程的有关内容.进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: • 一个是操作系统用来管理进程的…
第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是否适用. 到目前为止,已经知道创建多线程应用程序是非常困难的.需要会面临两个大问题.一个是要对线程的创建和撤消进行管理,另一个是要对线程对资源的访问实施同步.为了对资源访问实施同步,Wi n d o w s提供了许多基本要素来帮助进行操作,如事件.信标.互斥对象和关键代码段等.这些基本要素的使用都非…
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…
第6章 线程的基础知识 理解线程是非常关键的,因为每个进程至少需要一个线程.本章将更加详细地介绍线程的知识.尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用.还要介绍系统如何使用线程内核对象来管理线程.与进程内核对象一样,线程内核对象也拥有属性,我们将要观察许多用于查询和修改这些属性的函数.此外还要介绍可以在进程中创建和生成更多的线程时所用的函数. 第4章介绍了进程是由两个部分构成的,一个是进程内核对象,另一个是地址空间.同样,线程也是由两个部分组成的: • 一个是线程的内核对象,…
用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在一个线程读内存时要限制其他线程对此块内存进行写入. 线程之间的通信很重要,尤其是在以下两种情况下: 1:需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性. 2:一个线程需要通知其他线程某项任务已经完成. 线程同步包括许多方面,windows提供了许多基础设施使线程同步变得容易. 用户模式…
与前面介绍的进程一样,线程也有两部分组成.一个是线程内核对象.它是一个数据结构,操作系统用它来管理线程以及用它来存储线程的一些统计信息.另一个是线程栈,用于维护线程执行时所需的所有函数参数和局部变量.位于同一个进程的线程共享进程的地址空间且它们共享进程句柄表.因为句柄表是针对进程的.进程需要很多的系统资源,而线程仅仅需要一个线程内核对象和线程栈就可以了,因此线程比进程的开销要小得多.采用多线程来处理问题也是理所当然的了. 采用多线程可以提高程序的执行效率,但是多线程也存在很多问题.在尝试使用多线…