做了一些简单测试,想了解操作系统一个进程中到底可以创建多少个线程。
最后发现和:stack size (kbytes, -s) 4096 这个参数有关,可以用ulimit -a查看,修改用ulimit -s
我测试了Linux/HPUX 11.23 IA64两个环境的,测试结果基本差不多。
进程中可以自己设置线程堆栈大小:
pthread_t thrid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_attr_setstacksize(&attr,4*1024);
for (i=1; i>0; i++)
{
if (pthread_create(&thrid, &attr, child_loop, (void *)i) != 0)
{
printf("create thread count:%d err:%d-%s\n", i, errno, strerror(errno));
break;
}
}
HPUX最后输出:
....
248 thr#249 loop...
create thread count:249 err:12-Not enough space
int nthr = 0;
static void *child_loop(void *argv)
{
int i = (int)argv;
while (1)
{
printf("%d thr#%u loop...\n", i, (uint32_t)pthread_self());
sleep(6);
}
return (NULL);
}
int main(int argc, char **argv)
{
int i;
pthread_t thrid;
for (i=1; i>0; i++)
{
if (pthread_create(&thrid, NULL, child_loop, (void *)i) != 0)
{
printf("create thread count:%d err:%s\n", i, strerror(errno));
break;
}
}
return (-1);
}
|
阅读(3770) | 评论(1) | 转发(0) |