线程、进程内核对象引用计数问题

来源:互联网 发布:燕十八mysql视频全套 编辑:程序博客网 时间:2024/05/01 06:25
一般,我们创建一个新的线程、互斥量等时,内核会为我们在内存的内核区生成一个对应的内核对象。注意:
  • 内核对象是一个数据结构,而非可执行代码的地址,当然也不是某一资源(比如互斥量)本身。它只是一个数据结构,包含了一些成员变量,而这些变量记录着对应资源相关的信息(比如对象的引用计数)。
  • 其中,进程对象以及线程对象与一般内核对象在创建后引用计数不同。

 

1。那么为什么有时候我们经常看到在创建线程后,立即使用CloseHandle来关闭线程句柄呢。

如果我们深入分析一下线程内核对象的数据结构,我们就知道原因了。在线程的内核对象中,有一个Handle成员变量,它保存着该线程对象的句柄。虽然我们不知道它是采用何种方式获得内核对象句柄的,但是我们可以肯定的是,这是由于该变量的存在,我们的线程内核对象的引用计数又增加了1。也就是,调用创建线程的函数后,线程内核对象引用计数变为2。所以,我们可以在创建后,立即关闭线程内核对象句柄,(只表示,调用线程对新线程不再感兴趣啦,新线程仍然继续执行,要知道,此时,引用计数为1,而非0,所以内核对象依然存在啊)。

 

原创粉丝点击