linux最多能同时运行几个线程?

bbisonic 2007-11-21 07:07:51
我写了程序如下:
结果创建到第306个线程时就报如下错误:
can't create thread 306: Cannot allocate memory
can't create thread 307: Cannot allocate memory
谁能帮忙解释下为什么吗?
难道同时只能运行305个线程么?

#include <stdio.h>
#include <pthread.h>
#include <string.h>

pthread_t ntid;

void *
thr_fn(void *arg)
{
pthread_detach(pthread_self());

sleep(50000);
}

#define MAXTHREAD 600

int
main(void)
{
int err;
int i;

for (i = 0; i < MAXTHREAD; i++)
{
err = pthread_create(&ntid, NULL, thr_fn, NULL);
if (err != 0)
fprintf(stderr, "can't create thread %d: %s\n", i + 1, strerror(err));
else
printf("thread %d create success\n", i + 1);
}

sleep(500000);
}
...全文
923 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbisonic 2007-11-22
  • 打赏
  • 举报
回复
谢谢pottichu,问题解决了
估计是受到进程空间的限制吧,linux用户空间有3个G,300个线程*10兆确实是接近3个G
不知道NPTL和LinuxThreads这两个线程库对于栈的限制上有何不同?
Avoid 2007-11-21
  • 打赏
  • 举报
回复
默认是256个

linux现在默认是joinable的

所以必须调用pthread_join来回收线程

如果设置pthread_detach(pthread_self())就可以不回收

pottichu 2007-11-21
  • 打赏
  • 举报
回复
你执行一下
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 5120
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

修改你的 stack size (kbytes, -s) 5120 大小
执行 ulimit -s 5120 命令.

这样的话,你的程序就能创建 500 个线程了。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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