如何确保不再获取线程池的返回线程ID

时间:2013-03-31 06:43:58

标签: c multithreading

我在Linux上用C编写代码。

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

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

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

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

1 个答案:

答案 0 :(得分:4)

我认为你不能同时拥有唯一的线程ID和线程池 - 线程池的重点是线程将在以后重新用于更多任务,并且线程不能(AFAIK)在创建线程ID后更改它们。

所以,你的选择是:

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

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

相关问题