2011-02-24 80 views

回答

14

據我所知,Linux的pthread庫沒有線程句柄的概念。 pthread_create和其他pthreads函數,返回一個線程ID。

在Windows下,線程句柄與線程ID不同,與文件句柄與文件名不同。

線程句柄是一個令牌,它允許您對線程執行某些操作(通常等待或殺死它)。 Win32具有許多對象的這些標記,並將它們稱爲HANDLE。

該令牌本質上是一個指向正在運行(或已停止)線程的指針,並具有一組與其關聯的能力,例如,您可以擁有允許您等待而不是終止線程的句柄。以同樣的方式,我們可以有一個只讀的文件句柄。

這種間接性級別可能有用也可能沒有用,但它是Win32的做法,並且與它處理某些其他類型的對象的方式大體一致。

2

線程ID是漸進的(即一個接一個),您可以遍歷。線程句柄,就像Windows中的大多數句柄一樣,實際上是指針。 例如,您可以通過使用線程句柄來設置線程屬性位,但不能使用線程ID。

4

ID是在系統中運行的線程的唯一數字標識符。像任何內核對象句柄一樣,線程句柄可以看作是指向內核對象的特殊類型的引用計數指針。

所以在內核空間有一個與ID類型的線程的對象= 12345

因爲你想要做的事跟你有一個指針在您的稱爲線程ID的地址空間與價值線44

請注意,對同一個內核對象的不同句柄具有不同的值(兩個指向一個對象的指針),並且內核對象可以在多個進程中具有句柄。