pthread_exit(空);不工作
pthread_exit(NULL); not working
这是我创建一些线程的代码。我想同时创建 500 个线程,而不是更多。很简单,但是我的代码在创建 32xxx 线程后失败了。
然后我不明白为什么我在32751个线程后得到错误代码11,因为,每个线程都结束了。
我能理解,如果线程不退出,那么同一台计算机上有 32751 个线程......但是在这里,每个线程都退出了。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
void *test_tcp(void *);
int main ()
{
pthread_t threads[500];
int pointeur_thread;
unsigned long compteur_de_thread=0;
long ttt=0;
int i;
for(int i=0;i<=1000000;i++)
{
ttt++;
pointeur_thread=pthread_create(&threads[compteur_de_thread],NULL,test_tcp,NULL);
if (pointeur_thread!=0)
{
printf("Error : %d\n",pointeur_thread);
exit(0);
}
printf("pointeur_thread : %d - Thread : %ld - Compteur_de_thread : %ld\n",pointeur_thread,compteur_de_thread,ttt);
compteur_de_thread++;
if (compteur_de_thread>=500)
compteur_de_thread=0;
}
printf("The END\n");
}
void *test_tcp(void *thread_arg_void)
{
pthread_exit(NULL);
}
您可能得到对应于 EAGAIN 的错误值,这意味着:资源不足,无法创建另一个线程。
问题是您没有在线程退出后加入它们。这可以在 if 语句中完成,您可以在其中检查是否已使用所有 ID:if (compteur_de_thread>=500)
.
只需遍历数组并对所述数组的元素调用 pthread_join
。
除了连接线程之外的另一种选择是分离每个线程。分离的线程在结束时释放所有资源。
为此只需调用
pthread_detach(pthread_self());
线程函数内部。
如果这样做,请注意也通过调用pthread_exit()
(而不是只是 return
ing 或 exit()
ing),就好像没有这样做一样,main()
不仅会退出自身,还会退出整个进程,并以此关闭所有进程的线程,可能仍然是 运行.
谢谢大家
我用"pthread_detach(pthread_self());"替换了"pthread_exit(NULL);",现在完美了。
我认为退出意味着:"Close the Thread"
我认为分离意味着 "Thread in wait"
但是没有:)
谢谢大家
克里斯托夫
这是我创建一些线程的代码。我想同时创建 500 个线程,而不是更多。很简单,但是我的代码在创建 32xxx 线程后失败了。
然后我不明白为什么我在32751个线程后得到错误代码11,因为,每个线程都结束了。
我能理解,如果线程不退出,那么同一台计算机上有 32751 个线程......但是在这里,每个线程都退出了。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
void *test_tcp(void *);
int main ()
{
pthread_t threads[500];
int pointeur_thread;
unsigned long compteur_de_thread=0;
long ttt=0;
int i;
for(int i=0;i<=1000000;i++)
{
ttt++;
pointeur_thread=pthread_create(&threads[compteur_de_thread],NULL,test_tcp,NULL);
if (pointeur_thread!=0)
{
printf("Error : %d\n",pointeur_thread);
exit(0);
}
printf("pointeur_thread : %d - Thread : %ld - Compteur_de_thread : %ld\n",pointeur_thread,compteur_de_thread,ttt);
compteur_de_thread++;
if (compteur_de_thread>=500)
compteur_de_thread=0;
}
printf("The END\n");
}
void *test_tcp(void *thread_arg_void)
{
pthread_exit(NULL);
}
您可能得到对应于 EAGAIN 的错误值,这意味着:资源不足,无法创建另一个线程。
问题是您没有在线程退出后加入它们。这可以在 if 语句中完成,您可以在其中检查是否已使用所有 ID:if (compteur_de_thread>=500)
.
只需遍历数组并对所述数组的元素调用 pthread_join
。
除了连接线程之外的另一种选择是分离每个线程。分离的线程在结束时释放所有资源。
为此只需调用
pthread_detach(pthread_self());
线程函数内部。
如果这样做,请注意也通过调用pthread_exit()
(而不是只是 return
ing 或 exit()
ing),就好像没有这样做一样,main()
不仅会退出自身,还会退出整个进程,并以此关闭所有进程的线程,可能仍然是 运行.
谢谢大家
我用"pthread_detach(pthread_self());"替换了"pthread_exit(NULL);",现在完美了。
我认为退出意味着:"Close the Thread" 我认为分离意味着 "Thread in wait"
但是没有:) 谢谢大家
克里斯托夫