当前位置: 技术问答>linux和unix
pthread_create()创建一千次以上线程失败!!为什么??请大家帮忙看一下
来源: 互联网 发布时间:2015-09-29
本文导语: 服务端接受到一个连接请求就创建一个线程去处理,处理完成后就退出线程,如此反复,奇怪的是,每当创建了1000多次线程后,比如前面已经创建过1000多次了,然后突然就创建失败,即pthread_create函数返回1,用perror...
服务端接受到一个连接请求就创建一个线程去处理,处理完成后就退出线程,如此反复,奇怪的是,每当创建了1000多次线程后,比如前面已经创建过1000多次了,然后突然就创建失败,即pthread_create函数返回1,用perror打印显示,abrrupted system call,什么意思?是不是前面创建的线程没有释放?(应该不会,处理完了就退出了),还是因为资源没有释放,退出线程后资源是不是会自动释放呢?请大家帮忙分析一下,谢谢!!
|
退出线程资源不会自动释放。退出进程会
|
线程退出前,调用一下释放资源的函数
//释放资源的函数
{ }
_endthread();
//释放资源的函数
{ }
_endthread();
|
线程有限制的
如果你改变ulimit 但是也会受到资源限制
所以请注意 需要pthread_join
来回收
如果你改变ulimit 但是也会受到资源限制
所以请注意 需要pthread_join
来回收
|
系统对进程的资源是有限制的。
在一个进程里面,你不能够打开足够多的文件;
同样,一个进程里面,你不能够创建足够多的线程。
在一个进程里面,你不能够打开足够多的文件;
同样,一个进程里面,你不能够创建足够多的线程。
|
pthread_attr_init()、pthread_attr_setscope()
|
为什么现在大家都喜欢动不动创建线程呢?其实线程多了只有坏处没有好处啊!
工作原理上,线程等于在系统上进行调度的函数(按时间、等级等),那为什么不自己调度函数呢?这样能减少系统的开销!
工作原理上,线程等于在系统上进行调度的函数(按时间、等级等),那为什么不自己调度函数呢?这样能减少系统的开销!
|
线程执程完pthread_exit