一个令人尴尬的问题:线程ID与线程句柄有什么区别?为什么都需要? Windows和Linux有什么不同?线程ID与线程句柄
10
A
回答
14
据我所知,Linux的pthread库没有线程句柄的概念。 pthread_create和其他pthreads函数,返回一个线程ID。
在Windows下,线程句柄与线程ID不同,与文件句柄与文件名不同。
线程句柄是一个令牌,它允许您对线程执行某些操作(通常等待或杀死它)。 Win32具有许多对象的这些标记,并将它们称为HANDLE。
该令牌本质上是一个指向正在运行(或已停止)线程的指针,并具有一组与其关联的能力,例如,您可以拥有允许您等待而不是终止线程的句柄。以同样的方式,我们可以有一个只读的文件句柄。
这种间接性级别可能有用也可能没有用,但它是Win32的做法,并且与它处理某些其他类型的对象的方式大体一致。
2
线程ID是渐进的(即一个接一个),您可以遍历。线程句柄,就像Windows中的大多数句柄一样,实际上是指针。 例如,您可以通过使用线程句柄来设置线程属性位,但不能使用线程ID。
4
ID是在系统中运行的线程的唯一数字标识符。像任何内核对象句柄一样,线程句柄可以看作是指向内核对象的特殊类型的引用计数指针。
所以在内核空间有一个与ID类型的线程的对象= 12345
因为你想要做的事跟你有一个指针在您的称为线程ID的地址空间与价值线44
请注意,对同一个内核对象的不同句柄具有不同的值(两个指向一个对象的指针),并且内核对象可以在多个进程中具有句柄。
相关问题
- 1. 句柄如何与线程相关?
- 2. 获取进程主线程的句柄
- 3. 线程池 - 为WaitAll 64句柄限制
- 4. 跨线程使用事件句柄 - C++
- 5. 检查线程是否存在句柄
- 6. 线程与线程
- 7. 当所有线程内核对象句柄关闭时,线程仍在运行
- 8. 如何从win32进程获取线程句柄列表?
- 9. 给定一个线程的id或句柄,我如何确定线程的状态?
- 10. 基于线程ID的中断线程
- 11. 从线程获取线程ID
- 12. 线程ID从线程名称
- 13. 在线程开始之前获取线程的线程ID
- 14. 多线程与单线程与Asp.net 3.5
- 15. 设置线程ID
- 16. dispatch_get_main_queue()的线程ID
- 17. Posix线程ID与linux线程ID是否有一对一的关系?
- 18. 进程与线程
- 19. 从管理线程ID窗口线程ID
- 20. java编程和java单线程多线程问题(单线程与多线程)
- 21. 线程上下文与线程ID - 使用CoreData与异步等待
- 22. 如何在C#线程中使用等待句柄?
- 23. 如何用PHP获取Apache请求线程句柄号?
- 24. C#在线程间共享文件句柄
- 25. 如何检测线程是否有窗口句柄?
- 26. 在等待句柄上增加线程优先级
- 27. 使用SerialPort和C#中的线程“安全句柄已关闭”#
- 28. 线程可以拥有其他句柄吗?
- 29. 跨多线程管道客户端共享管道句柄
- 30. 离线web应用程序句柄保存在javascript