說,如果我有一個線程ID,我可以確信,每個進程或整個操作系統(在所有登錄用戶中)它將是唯一的(線程運行的時間)?每個進程或每臺計算機的線程ID是唯一的嗎?
回答
是的,Windows上的線程ID和進程ID是從同一個池中分配的,因此它們將是唯一的。但是,一旦線程或進程結束,該ID可能會被另一個線程或進程重新使用。
是的,謝謝。我知道PID是唯一的。我不確定線程ID。 – c00000fd
您可以擴展您的答案來解釋線程ID或進程ID多久可以循環使用嗎? –
@ChristopherOezbek只要內核對象關閉,它的ID就可以重新使用。因此,下面是完全可能的:'hThread1 = CreateThread(... &tid1); CloseHandle(hThread1); hThread2 = CreateThread(... &tid2); // tid1 == tid2,即使hThread1 == hThread2'雖然他們現在指的是不同的內核對象 – parrowdice
線程由內核對象表示,例如,在Windows平臺上。因此,它在所有登錄會話的所有進程中都是唯一的。但是,線程ID可以在線程內核對象關閉後被回收。
GetCurrentThreadId也清楚地說明了運行時的唯一ID。
爲了防止線程ID回收(如果線程及其句柄可以在跟蹤該線程標識完成的情況下關閉),可以將其與創建線程的FILETIME結合使用,這可以通過GetThreadTimes()API獲得 – c00000fd
@ user843732 :以正確的方式完成,是的,你可以,我使用這種技術來檢查一個進程的父PID是否指示它的父進程與已經回收它的父進程PID的進程 – parrowdice
@parrowdice:一個後續問題,傢伙。由GetThreadTimes()API返回的FILETIME定時器沒有任何與定時器有關的「抖動」,這是否?該文檔聲稱創建線程的值以「100-ns ime單位「這是非常精確的!它不會導致內部計時器開始四捨五入來處理對該API的不同調用,是不是? – c00000fd
- 1. 如何識別每個具有唯一ID的遠程計算機
- 2. 每個線程或每個進程是FPU控制字設置嗎?
- 3. 線程和進程ID是唯一的嗎?
- 4. 每臺計算機的唯一和可讀的標識
- 5. ThreadLocalRandom或每個線程的新隨機
- 6. JMeter - 設置每個線程的唯一ID
- 7. C99 fesetround()/ fegetround()狀態是每個線程還是每個進程?
- 8. 每個字符的線程數和每個線程的線程設計
- 9. Android線程ID是全球每個進程?
- 10. 每個CLR或每個進程是否有一個託管堆?
- 11. 計算每秒結束的線程數
- 12. 每臺計算機的應用程序的一個實例,如何?
- 13. 每個線程的每個進程的時間量
- 14. 計算每個唯一行值
- 15. HP-UX:每個進程的線程數
- 16. log4j在多線程環境中。每個線程一個Appender或每個線程一個Logger或...?
- 17. Netty處理程序對每個連接都是唯一的嗎?
- 18. 每每個線程
- 19. C#試圖枚舉每個進程線程的每個窗口
- 20. 唯一值與每個ID
- 21. 使用唯一的ID計算每行的值
- 22. 我可以使用Qt線程ID爲每個線程創建唯一的緩存嗎?
- 23. 同一臺計算機上的多個套接字線程
- 24. 爲每個子進程分配一個帶有分叉的唯一ID
- 25. 來自同一臺計算機上多個進程的Logstash
- 26. 如何使用MFC計算Windows中每個進程中的線程數
- 27. 獨立於平臺的唯一計算機ID java
- 28. Windows中每個進程和每臺計算機可以使用多少個同步對象?
- 29. 如何爲每個用戶或每臺計算機安裝創建單個程序包
- 30. 給每個元素的唯一的ID
一旦您知道一個線程可以在其生命週期內的不同核心/處理器上運行,並且在此期間ID將保持不變,您可以自己推斷出答案;-) –