达到计数32751后无法创建线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了达到计数32751后无法创建线程相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
void *my_thread(void *ddd)
{
printf("Thread created
");
pthread_exit(NULL);
}
int main()
{
int ret = 0, counter = 0;
pthread_t et;
while(1)
{
ret = pthread_create(&et, NULL, my_thread, (void *)&counter);
if(ret)
{
printf("Ret = %d, errr = %d, couter = %d
", ret, errno, counter);
break;
}
counter++;
}
return 0;
}
以上是我的C代码。检查ulimit -s
它给8192
.I我没有使用pthred_join因为我想并行处理我的数据以及任何线程将在完成其工作后退出。创建32750 thred后程序的输出是
Thread created 32750
Thread created 32751
Ret = 11, errr = 12, couter = 32751
答案
线程可以是可连接的也可以是分离的。 ...
仅当已连接已终止的可连接线程时,其最后一个资源才会释放回系统。 ...
当分离的线程终止时,其资源会自动释放回系统:....
默认情况下,在可连接状态下创建新线程,除非将attr设置为以分离状态创建线程(使用thread_attr_setdetachstate(3))。
这意味着对于您创建但未加入的任何线程,某些资源在终止后仍会保留。在一定数量的线程之后,您将耗尽资源。
为了避免这种情况,cou可以在创建线程后调用pthread_detach
或使用pthread_attr_setdetachstate
在创建它之前。
以上是关于达到计数32751后无法创建线程的主要内容,如果未能解决你的问题,请参考以下文章