linux c语言 线程资源释放

最近做了多线程并发网络编程的时候出现了一个问题。程序在运行的过程中,占用的内存会越来越大。起初我怀疑是程序有指针没有被free,导致内存泄漏。在查代码的过程中我发现,我并没有手动收回创建的线程资源。通过上网查阅linux线程资源回收的资料, 我发现linux线程默认结束之后, 线程的资源不会得到释放。

Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。

释放线程的资源有两种方法。一种是系统在线程结束之后自动释放资源。这种方法,我们需要设置线程的一个属性。

pthread_t pThread; //创建线程

pthread_attr_t pProprety; //线程属性

pthread_attr_init(&pProprety);  //初始化线程属性

pthread_attr_setdetachstate(&pProprety,PTHREAD_CREATE_DETACHED);      //设置线程属性

pthread_create(&pThread, &pProprety,(void *)init_convert,client_sock);//创建线程时将线程属性传进去

另一种是用别的线程或者进程释放此线程的资源。线程或者进程中调用pthread_join()

pthread_t t;

pthread_create( NULL, NULL, GetSub, (void*)lp);

pthread_join( t);

值得注意的是,pthread_join(t)是阻塞的函数。如果t线程不消亡,这个线程就会一直在这里等待,直到t线程消亡。

你可能感兴趣的:(linux网络编程系列)