Win32多线程之线程对象与线程

发布时间:2014-10-23 23:26:02
来源:分享查询网

线程的handle是指向“线程核心对象”,而不是指向线程本身,对大部分API而言,这项差异没什么影响。当你调用CloseHandle()并给予它一个线程handle时,你只不过是表示,你希望自己和此核心对象不再有任何瓜葛。CloseHandle()唯一做的事情就是把引用计数减一。如果该值变成0,对象会自动被操作系统摧毁。    “线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对象的默认引用计数是2。 当你调用CloseHandle()时,引用计数下降1,当线程结束时,引用计数再降1.只有当两件事情都发生了(不管顺序如何)的时候,这个对象才会被真正清除。    “引用计数”机制保证新的线程有个地方可以写下其返回值。这样的机制也保证旧线程能够读取那个返回值-----只要它没有调用CloseHandle()。    由于被CreateThread()传回的那个handle属进程所有,而非线程所有, 所以很可能有一个新产生的线程调用CloseHandle(),取代原来的线程。Microsoft Visual C++ runtime library、中的_beginthread()就是这么做的。

返回顶部
查看电脑版