首先让我解释什么叫做“核心对象”(kernel object)。“GDI对象”是大家比较熟悉的东西,我们利用GDI函数所产生的一支笔(pen)或一支刷(brush)都是所谓的“GDI对象”。但什么又是“核心对象”呢?
你可以说核心对象是系统的一种资源(噢,这说法对GDI对象也适用),系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予核心对象一个计数值(usage count)作为管理之用。核心对包括下列数种:
核 心 对 象 | 产 生 方 法 |
event | CreateEvent |
mutex | CreateMutex |
semaphore | CreateSemaphore |
file | CreateFile |
file-mapping | CreateFileMapping |
process | CreateProcess |
thread | CreateThread |
前三者用于线程的同步化:file-mapping对象用于内存映射文件(memory mapping file),process和thread对象则是本节的主角。这些核心对象的产生方式(也就是我们所使用的API)不同,但都会获得一个handle作为识别;每被使用一次,其对应的计数值就加1。核心对象的结束方式相当一致,调用CloseHandle即可。
“process对象”究竟做什么用呢?它并不如你想象的那样,用来“执行程序代码”;不,程序代码的执行是线程的工作,“process对象”只是一个数据结构,系统用它来管理进程。