【发布时间】:2021-09-14 20:22:39
【问题描述】:
所以我的代码基本上是
pthread_t cpu[10];
while (a certain condition){
for (int i=0;i<10;i++){
pthread_create(&cpu[i],NULL,(a function), NULL);
}
这段代码一次应该运行大约 10 个线程,但是,在运行 while 循环一定次数后,它说它们是代码 11 的 pthread 错误。我知道我正在多次运行线程,但不应该只发生 10 个实例?
【问题讨论】:
-
minimal reproducible example 会很有帮助。
-
你有没有在你的线程上调用
pthread_join()?如果没有,很可能你很快就堆积了很多泄漏的线程资源,很快你就会达到资源限制并出错。 -
@JeremyFriesner 我不会一直调用 pthread_join() 但我不希望我的程序等待线程完成
-
@mike91827 但是您仍然达到了资源限制,因为您在 while 循环中不断创建线程。要么停止创建线程,要么至少偶尔删除一些线程。
-
你有一个限制。你超出了这个限制。你只想要10个线程?创造十个,而不是一千万。然后,如果您认为是时候删除这些线程,请通过调用 pthread_join 来完成它们。同时,做任何你认为应该做的事情。如果您想重用线程,请考虑线程池和工作线程(任务列表,每个线程一次处理一个)。
标签: c multithreading