一個令人尷尬的問題:線程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是否有一對一的關係?