Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何确保返回到线程池的线程ID不会再次获取_C_Multithreading - Fatal编程技术网

C 如何确保返回到线程池的线程ID不会再次获取

C 如何确保返回到线程池的线程ID不会再次获取,c,multithreading,C,Multithreading,我正在Linux上用C编写代码 在代码中,首先它生成50个线程,然后每个线程生成1、2或3个以上的线程 我的问题是(我猜)当其中一个线程完成其工作时(在这种情况下,可能还有一些其他线程尚未启动),它会将其ID返回到线程池 因此,当其余线程启动时,它们可能具有与先前线程返回到线程池的相同的线程ID 我不要这个。我需要唯一的线程ID(通过确保返回的ID不会被剩余的线程再次获取)我不认为您可以同时拥有唯一的线程ID和线程池——线程池的全部要点是线程将在以后被重新用于更多的任务,而线程则无法(AFAIK

我正在Linux上用C编写代码

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

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

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


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

我不认为您可以同时拥有唯一的线程ID和线程池——线程池的全部要点是线程将在以后被重新用于更多的任务,而线程则无法(AFAIK)在创建线程后更改其线程ID

因此,您的选择是:

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


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

我不认为您可以同时拥有唯一的线程ID和线程池——线程池的整个要点是,线程将在以后被重新用于更多任务,并且线程在创建后无法(当然)更改其线程ID

因此,您的选择是:

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


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

请向我们展示您的代码。尤其是您使用的库,OS,等等……相关:请向我们展示您的代码。尤其是您正在使用的库、操作系统等等……相关: