一个令人尴尬的问题:线程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. perl与线程共享文件句柄
- 2. 句柄如何与线程相关?
- 3. “泄漏”线程句柄
- 4. 获取进程主线程的句柄
- 5. 空线程标识符[WinAPI](非线程句柄)
- 6. 在退出相关线程之前关闭线程句柄
- 7. 检查线程是否存在句柄
- 8. 从本地句柄创建std ::线程?
- 9. OpenThread和关闭多个线程句柄
- 10. 跨线程使用事件句柄 - C++
- 11. 线程池 - 为WaitAll 64句柄限制
- 12. 线程中的句柄错误无效
- 13. 从线程ID获取句柄是不可能的?
- 14. 线程与线程
- 15. 是否需要在调用Closehandle(线程句柄)后将“线程句柄”分配给null?
- 16. MessageBox.Show从backgound工人称为与主UI线程的句柄
- 17. 的CreateFile/ReadFile的WriteFile的与多线程 - 无效的句柄
- 18. 如何从win32进程获取线程句柄列表?
- 19. 给定一个线程的id或句柄,我如何确定线程的状态?
- 20. 线程ID从线程名称
- 21. 基于线程ID的中断线程
- 22. 从线程获取线程ID
- 23. ReactJs路线句柄abc.com/:pageId
- 24. 在线程开始之前获取线程的线程ID
- 25. 多线程与单线程与Asp.net 3.5
- 26. dispatch_get_main_queue()的线程ID
- 27. 设置线程ID
- 28. 线程ID的GetModuleFileNameEx?
- 29. 获取线程ID
- 30. Posix线程ID与linux线程ID是否有一对一的关系?