2013-03-31 46 views
1

我正在Linux上編寫C代碼。如何確保返回到線程池的線程ID不應再次獲取

在代碼中,首先產生50個線程,然後每個線程產生1,2或3個線程。

我的問題是(我猜)當其中一個線程完成其工作(在這種情況下可能有一些其他線程尚未啓動),它將其ID返回到線程池。

因此,當剩餘的線程開始時,它們可能具有相同的線程ID,而早期的線程ID返回到線程池。

我不想要這個。我需要唯一的線程ID(通過確保返回的ID不應該被剩餘的線程再次獲取)

+1

請向我們顯示您的代碼。 – NPE

+1

特別是你正在使用什麼庫,操作系統,等等... –

+0

相關:http://stackoverflow.com/a/15723613/694576 – alk

回答

4

我不認爲你可以同時擁有唯一的線程ID和線程池 - 線程池是線程稍後將被用於更多任務,並且線程無法在AFAIK創建後更改其線程ID。

所以,你的選擇是:

(一)停止使用線程池,並只產生一個新的線程,每次你需要一個時間(並讓該線程退出時,它的任務是完成)。這通常會爲您提供新的線程ID,但請注意,如果僅有可用的線程ID數量有限,操作系統最終也會重新使用線程ID。

(二)修改程序,以便它不希望線程ID永遠不會被重複使用。如果可能的話,修改你的程序,以便它根本不查看線程ID。例如,如果使用線程ID作爲程序需要完成的任務的ID,請將其替換爲通過增加原子(或受互斥鎖保護的)計數器生成的任務ID。

+0

謝謝傑里米弗里斯納米現在做同樣的 – user2228673