线程ID与线程句柄

Fir*_*his 13 linux windows multithreading operating-system

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

Mar*_*rkR 16

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

在Windows下,线程句柄与线程ID不同,与文件句柄与文件名不同的方式相同.

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

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

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


Rit*_*tra 5

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

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

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

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