1

我正在 Linux 上用 C 语言编写代码。

在代码中,首先它生成 50 个线程,然后每个线程再生成 1,2 或 3 个线程。

我的问题是(我猜)当其中一个线程完成其工作时(在这种情况下,其他一些线程可能尚未启动),它将其 ID 返回到线程池。

因此,当剩余线程启动时,它们可能具有与先前返回到线程池的线程 ID 相同的线程 ID。

我不想要这个。我需要唯一的线程 ID(通过确保返回的 ID 不应被剩余线程再次获取)

4

1 回答 1

4

我不认为你可以同时拥有唯一的线程 ID 和线程池——线程池的全部意义在于线程将在以后被重新用于更多任务,而线程不能(AFAIK)在创建它们后更改它们的线程 ID。

所以,你的选择是:

(a) 停止使用线程池,并在每次需要时生成一个新线程(并在其任务完成时让线程退出)。这通常会为您提供新的线程 ID,但请注意,操作系统最终也会开始重新使用线程 ID,这只是因为可用的线程 ID 数量有限。

或者

(b) 修改您的程序,使其不期望线程 ID 永远不会被重用。如果可能,请修改您的程序,使其根本不查看线程 ID。例如,如果您使用线程 ID 作为程序需要完成的任务的 ID,请将其替换为您通过增加原子(或互斥保护)计数器生成的任务 ID。

于 2013-03-31T07:13:13.763 回答