我正在Linux上編寫C代碼。如何確保返回到線程池的線程ID不應再次獲取
在代碼中,首先產生50個線程,然後每個線程產生1,2或3個線程。
我的問題是(我猜)當其中一個線程完成其工作(在這種情況下可能有一些其他線程尚未啓動),它將其ID返回到線程池。
因此,當剩餘的線程開始時,它們可能具有相同的線程ID,而早期的線程ID返回到線程池。
我不想要這個。我需要唯一的線程ID(通過確保返回的ID不應該被剩餘的線程再次獲取)
我正在Linux上編寫C代碼。如何確保返回到線程池的線程ID不應再次獲取
在代碼中,首先產生50個線程,然後每個線程產生1,2或3個線程。
我的問題是(我猜)當其中一個線程完成其工作(在這種情況下可能有一些其他線程尚未啓動),它將其ID返回到線程池。
因此,當剩餘的線程開始時,它們可能具有相同的線程ID,而早期的線程ID返回到線程池。
我不想要這個。我需要唯一的線程ID(通過確保返回的ID不應該被剩餘的線程再次獲取)
我不認爲你可以同時擁有唯一的線程ID和線程池 - 線程池是線程稍後將被用於更多任務,並且線程無法在AFAIK創建後更改其線程ID。
所以,你的選擇是:
(一)停止使用線程池,並只產生一個新的線程,每次你需要一個時間(並讓該線程退出時,它的任務是完成)。這通常會爲您提供新的線程ID,但請注意,如果僅有可用的線程ID數量有限,操作系統最終也會重新使用線程ID。
或
(二)修改程序,以便它不希望線程ID永遠不會被重複使用。如果可能的話,修改你的程序,以便它根本不查看線程ID。例如,如果使用線程ID作爲程序需要完成的任務的ID,請將其替換爲通過增加原子(或受互斥鎖保護的)計數器生成的任務ID。
謝謝傑里米弗里斯納米現在做同樣的 – user2228673
請向我們顯示您的代碼。 – NPE
特別是你正在使用什麼庫,操作系統,等等... –
相關:http://stackoverflow.com/a/15723613/694576 – alk