Windows核心编程
文章平均质量分 74
Windows核心编程第五版读书笔记以及心得
slunlun
这个作者很懒,什么都没留下…
展开
-
windows核心编程读书笔记7——内核态线程同步(2)利用内核对象同步
事件对象event对象常用来多个线程间进行工作的同步,如线程A先执行一些初始化工作,触发evnet,通知线程B初始化工作已经完成,可以进行接下来的工作。创建event对象HANDLE WINAPI CreateEvent( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, // 设置安全属性 _In_ BOOL b原创 2015-03-02 10:03:05 · 932 阅读 · 0 评论 -
windows核心编程读书笔记6——内核态线程同步(1)概述
除了用户态的线程同步,我们可以使用内核对象进行线程的同步。与用户态同步相比,内核态同步耗时要多(用户态内核态切换),但内核同步能够跨进程同步,并使用灵活,以及配套的安全机制。触发未触发状态对于内核对象来说,均有触发及未触发状态,其状态转换规则因不同内核对象而异。利用内核对象同步,我们就利用了内核对象的这种状态转换。等待函数要进行内核态同步,需要使用等待函数来使为获得等待对象触发状态原创 2015-02-25 16:44:07 · 1045 阅读 · 0 评论 -
windwos核心编程读书笔记5——线程(5)用户态线程同步
在多线程环境下,线程同步是不可避免的话题。Windows环境下的线程同步分为:用户态同步 与 内核态同步。下面我们先了解用户态同步的一些方法。使用Interlocked系列函数。简单易用的函数。关键段。用来对关键资源实现独享访问。Slim读写锁。灵活的进行写独享读共享操作。条件变量。当线程要进行较为复杂的条件进行同步时,可以实现。Interlocked系列函数。Window原创 2015-02-25 11:07:02 · 977 阅读 · 0 评论 -
Windows核心编程读书笔记4——线程(4)当前线程句柄与伪句柄
在windows编程中,有时候我们会遇到需要传入作用对象句柄的函数,如GetThreadTimes(HANDLE hThread, ...)函数,允许我们获得句柄指定线程的运行时间。如果我们需要本线程的运行时间,那么只需要简单调用函数GetCurrentThread()函数即可,其会返回当前线程的“伪”句柄。类似的,我们也有函数可以获得当前进程的句柄。HANDLE GetCurrentTh原创 2015-02-10 09:57:22 · 2046 阅读 · 0 评论 -
Windows核心编程读书笔记3——线程(3) 正确编写C/C++运行库下的线程
如何在C/C++运行库下正确的启用新线程由于C/C++的历史早于线程的出现,因此C/C++的函数并不都是线程安全的。如全局变量errno等。这就需要一种解决方案。一种方法是利用属于每个线程的数据块,该数据块不会被线程共享,而只能够用于线程自己,这样类似errno的情况便迎刃而解。此外,C/C++运行库针对特定函数做了改写,使其能够进行线程同步。如malloc函数,由于不能够多线程同时执原创 2015-02-03 11:28:36 · 1700 阅读 · 0 评论 -
Windows核心编程读书笔记2——线程(2)线程内幕
线程结构如上一篇文章所述,系统创建线程时,会分配一个内核对象与线程栈。如下图线程内核对象如左侧,其初始为1、引用计数为22、挂起计数为1(此时线程无法运行)3、退出代码为STILL_ACTIVE状态4、内核对象未触发状态5、记录线程上下文的CONTEXT结构为初始值。注意其中的SP(栈指针寄存器)与IP(指令指针寄存器)。SP指向pfnStartAddr原创 2015-02-03 10:29:30 · 1462 阅读 · 0 评论 -
Windows核心编程读书笔记1——线程(1)线程基础
在Windows系统中,进程更像一个容器,其功能的实现是靠线程完成的,即进程具有惰性。一个进程,至少拥有一个线程来执行任务。(进程第一个被创建的线程叫做主线程,其他的进程中的线程均为其子线程)线程数据结构对进程来说,一个进程包括 一个地址空间 和 一个内核对象。对于线程,类似的 拥有一个内核对象 和 一个线程栈(用于维护线程执行时 所需要的函数参数及变量)。同时,对于线程来原创 2015-01-12 20:54:42 · 925 阅读 · 0 评论