线程ID与线程句柄

一个尴尬的问题:线程ID和线程句柄有什么区别? 为什么都需要? Windows和Linux有什么不同?

Solutions Collecting From Web of "线程ID与线程句柄"

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

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

线程句柄是一个令牌,它允许你对线程执行某些操作(通常等待或者杀死它)。 Win32具有许多对象的这些标记,一般称它们为“HANDLE”。

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

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

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

所以在内核空间中有一个ID为12345的THREAD类型的对象

而且因为你想在线程中做一些事情,所以你的地址空间中有一个指针,它的值是44,叫做threadID。

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

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