同一线程多次创建 的 线程资源释放问题在每个线程的一开始,用pthred_detach(pthread_self())来使自己detach掉

fxhnkf
关于线程创建个数的问题

我的程序里调用pthread_create创建一个线程,此线程执行完一定任务后由pthread_exit(NULL);退出
主程序不断的创建此thread
发现到了第500多次创建时,pthread_create返回11,我查了一下errno.h,11是"No more processes"
这是为什么呢????

fxhnkf
关于线程创建个数的问题

感谢大家的帮忙!

renstone921
关于线程创建个数的问题

系统创建的进程数目太多,可能你的系统里时使用进程模仿线程的,既然你的机器的资源不是无限的,每创建一个线程,大多数情况下,都需要有1M的堆栈空间,你算一下,你的系统里能创建多少线程吧。
好像是getrlimit函数,获得系统的资源限制,你man一下,看一下你的系统的限制吧。或者使用ulimit命令。

fxhnkf
关于线程创建个数的问题

可是我每次都调用
pthread_exit(NULL)
来释放线程资源啊??
难道这些资源不会被释放掉吗??我用的机器是HP的L2000
我想他还不至于这么差吧

renstone921
关于线程创建个数的问题

不好意思,没用过hp的机子。不过你先还是先确定一下你系统的进程数目的上限是什么,这个应当是可配置的。

fxhnkf
关于线程创建个数的问题

就算是系统进程数目的上限可以配置,可以更改的更大
如果真的pthread_exit(NULL);不能完全释放线程资源,那么不管这个上限设为多大,总会将资源用光的,达到上限的

我认为应该还是有其他的原因

fxhnkf
关于线程创建个数的问题

感谢大家参与讨论

fxhnkf
关于线程创建个数的问题

还望大家多看看,多聊聊

albcamus
关于线程创建个数的问题

你是否确信,当主线程调用pthread_create时,子线程们都以pthread_exit了?(这个不是必要的,但又可能是子线程没退出导致的问题)

soul_of_moon
关于线程创建个数的问题

[quote][i]原帖由 "fxhnkf" 发表:[/i]
我的程序里调用pthread_create创建一个线程,此线程执行完一定任务后由pthread_exit(NULL);退出
主程序不断的创建此thread
发现到了第500多次创建时,pthread_create返回11,我查了一下errno.h,11是"No more proces..........[/quote]
线程创建失败的原因是:
EAGAIN not enough system resources to create  a  process  for  the  new
       thread.

EAGAIN more than PTHREAD_THREADS_MAX threads are already active.
估计你的线程没有退出或来不及释放资源,可以用命令ps -A -m |grep 进程名,可以看到该进程有几个线程.

openX
关于线程创建个数的问题

是不是需要调用pthread_join

albcamus
关于线程创建个数的问题

晕死,不写线程才半年,居然就忘干净了。

问题如下解决:在每个线程的一开始,用pthred_detach(pthread_self())来使自己detach掉就可以了。

你可能感兴趣的:(pthread)