C 达到计数32751后无法创建线程

C 达到计数32751后无法创建线程,c,linux,pthreads,centos7,C,Linux,Pthreads,Centos7,从: 螺纹可以是可接合的,也可以是分离的。 只有当终止的可连接线程已连接时,才是其最后一个线程 将资源释放回系统。 当分离的线程终止时,其资源将自动释放 返回系统: 默认情况下,除非设置了attr,否则将在可接合状态下创建新线程 以分离状态创建线程(使用thread_attr_setdetachstate(3)) 这意味着,对于您创建但未加入的任何线程,在其终止后仍会保留一些资源。 在一定数量的线程之后,您将耗尽资源 为了避免这种情况,cou可以在创建线程后调用pthread\u deta

从:

螺纹可以是可接合的,也可以是分离的。

只有当终止的可连接线程已连接时,才是其最后一个线程 将资源释放回系统。

当分离的线程终止时,其资源将自动释放 返回系统:

默认情况下,除非设置了attr,否则将在可接合状态下创建新线程 以分离状态创建线程(使用thread_attr_setdetachstate(3))

这意味着,对于您创建但未加入的任何线程,在其终止后仍会保留一些资源。 在一定数量的线程之后,您将耗尽资源

为了避免这种情况,cou可以在创建线程后调用
pthread\u detach
,或者在创建线程之前使用
pthread\u attr\u setdetachstate

#include <stdio.h>
#include <pthread.h>
#include <errno.h>

void *my_thread(void *ddd)
{
    printf("Thread created\n");
    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\n", ret, errno, counter);
            break;
        }
        counter++;
    }
    return 0;
}
Thread created 32750
Thread created 32751
Ret = 11, errr = 12, couter = 32751