我正在Linux上用C语言写一段代码。
在代码中,它首先生成50个线程,然后每个线程再生成1、2或3个线程。
我的问题是(我猜)当其中一个线程完成它的工作时(在这种情况下,其他一些线程可能还没有启动),它会将它的ID返回给线程池。
因此,当剩余的线程启动时,它们可能具有与先前返回到线程池的线程ID相同的线程ID。
我不想这样。我需要唯一的线程ID (通过确保返回的ID不会被剩余的线程再次获取)
发布于 2013-03-31 15:13:14
我不认为您可以同时拥有唯一的线程ID和线程池--线程池的全部意义在于线程稍后将被重用用于更多的任务,并且线程在创建之后不能(AFAIK)更改它们的线程ID。
因此,您的选择是:
(a)停止使用线程池,并在每次需要线程时生成一个新线程(并让线程在其任务完成时退出)。这通常会为您提供新的线程is,但请注意,如果只是因为可用的线程is数量有限,操作系统最终也会开始重用线程is。
或
(b)修改您的程序,使其不会期望线程ID永远不会被重用。如果可能,修改您的程序,使其根本不查看线程ID。例如,如果您使用线程ID作为程序需要完成的任务的ID,请将其替换为通过递增原子(或互斥锁保护的)计数器生成的任务ID。
https://stackoverflow.com/questions/15727083
复制相似问题