线程ID与线程句柄

时间:2011-02-24 08:07:31

标签: windows linux multithreading operating-system

一个令人尴尬的问题:线程ID和线程句柄之间有什么区别?为什么两者都需要? Windows和Linux之间有区别吗?

3 个答案:

答案 0 :(得分:16)

据我所知,Linux的pthread库没有线程句柄的概念。 pthread_create和其他pthreads函数,返回一个线程ID。

在Windows下,线程句柄与线程ID不同,就像文件句柄与文件名不同。

线程句柄是一个令牌,它允许你对线程做一些事情(通常等待或杀死它)。 Win32拥有许多对象的这些令牌,并且通常称它们为HANDLE。

令牌本质上是运行(或停止)线程的指针,并具有一组与之关联的能力,例如,您可以拥有一个允许您等待但不能杀死线程的句柄。以同样的方式,我们可以有一个只读的文件句柄。

这种间接的方式可能有用,也可能没有用,但这是Win32的做法,它与处理其他类型对象的方式大体一致。

答案 1 :(得分:5)

ID是系统中运行的线程的唯一数字标识符。与任何内核对象句柄一样,线程句柄可以看作是指向内核对象的特殊类型的引用计数指针。

在内核空间中有一个THREAD类型的对象,ID = 12345

因为你想对线程做一些事情,你的地址空间中有一个指针,称为一个值为44的threadID。

请注意,同一内核对象的不同句柄具有不同的值(指向一个对象的两个指针),并且内核对象可以在多个进程中具有句柄。

答案 2 :(得分:3)

线程ID是渐进式的(即,一个接一个),您可以遍历。 与Windows中的大多数句柄一样,线程句柄实际上是指针。 例如,您可以使用线程句柄设置线程属性位 - 但不能使用线程ID。

相关问题