【请教】关于Linux中线程创建函数pthread_create的一个问题!!!

god_fish 2006-07-15 07:21:51
这样的一个简单程序:
///////////////////////////////////////////////////////////
#include <unistd.h>
#include <pthread.h>

#include <stdio.h>
#include <stdlib.h>

pthread_t touch_thread;
int handle_touch = 0;

void * touchThreadFunc( void * )
{
return 0;
}

int main(int argc, char* argv[])
{

for ( int i = 0; i < 10000; ++i )
{
handle_touch = pthread_create( &touch_thread, NULL, touchThreadFunc, NULL );
if ( handle_touch != 0 )
{
printf( "Error\n" );
exit( EXIT_FAILURE );
}

usleep( 10*1000 );
}
return 0;
}
//////////////////////////////////////////////////////////////////////
这个循环执行了256次后,pthread_create就失败了,请问这是为什么啊? 应该怎么解决呢?
...全文
364 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
akins 2006-10-12
  • 打赏
  • 举报
回复
楼主的程序编译通不过啊
test.c: In function `touchThreadFunc':
test.c:9: parameter name omitted

什么原因?
duduhaha 2006-07-15
  • 打赏
  • 举报
回复
在一个进程中能创建的线程个数又主要受栈的限制:2G/允许的最大栈大小,在i386平台上,控制台进程默认的最大栈大小为8M,所以能创建的线程数为2G/8M = 256个。但是,这个8M的限制可以通过命令ulimit修改,从而间接地增大可创建的线程个数。

线程从调用函数中退出后处于僵尸状态,还占用资源,需要用pthread_join回收才能释放占用的栈空间等资源.
zhousqy 2006-07-15
  • 打赏
  • 举报
回复
开这么多线程本来就不现实,谁的机器吃得消
jixingzhong 2006-07-15
  • 打赏
  • 举报
回复
线程有限制的,
如果你改变 ulimit, 
但是也会受到资源限制 ...

考虑一下是否可以在线程结束时候回收资源,
这样可能情况会好一点 ...

即:
线程退出前,调用一下释放资源的函数
//释放资源的函数
{ }
_endthread();

jixingzhong 2006-07-15
  • 打赏
  • 举报
回复
系统对一个用户可以同时运行的线程数有一个限制
(这个限制是可以改变的)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧