2013-03-31 45 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