免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6507 | 回复: 8
打印 上一主题 下一主题

linux中一个进程的最大线程数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-30 14:11 |只看该作者 |倒序浏览
我想知道系统中PTHREAD_THREADS_MAX的值,但我发现这个值是未定义的,/usr/include/bits/local_lim.h里面是这样写的:

  1. /* The number of threads per process.  */
  2. #define _POSIX_THREAD_THREADS_MAX       64
  3. /* We have no predefined limit on the number of threads.  */
  4. #undef PTHREAD_THREADS_MAX
复制代码


于是我写了一个小程序来试:
  1. #include<myhead.h>

  2. void *func(void*);

  3. int main(){
  4.    pthread_t t[1024];
  5.    int i,err;
  6.    for(i=0;i<1024;i++){
  7.       if((err=pthread_create(&t[i],NULL,func,NULL))!=0){
  8.          printf("err=%s\n",strerror(err));
  9.          break;
  10.       }   
  11.       pthread_detach(t[i]);
  12.    }   
  13.    printf("i=%d\n",i);
  14.    return 0;
  15. }

  16. void *func(void *arg){
  17.    sleep(2);
  18. }
复制代码

输出是:
err=Cannot allocate memory
i=382
是否代表我的系统中一个进程能开的最大线程数是382?(Ubuntu 7.04)

[ 本帖最后由 ddvv 于 2007-9-30 14:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-30 14:30 |只看该作者
由系统资源决定的吧

论坛徽章:
0
3 [报告]
发表于 2007-09-30 14:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2007-09-30 14:55 |只看该作者
ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) unlimited
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

没有。。。

论坛徽章:
0
5 [报告]
发表于 2007-09-30 15:03 |只看该作者
和进程的栈大小有关啊

论坛徽章:
0
6 [报告]
发表于 2007-09-30 15:14 |只看该作者
原帖由 gothicane 于 2007-9-30 15:03 发表
和进程的栈大小有关啊


那确实,用pthread_attr_setstacksize()来把默认的栈大小变小以后就变多了。。。。

论坛徽章:
0
7 [报告]
发表于 2007-09-30 16:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2007-09-30 16:29 |只看该作者

回复 #6 ddvv 的帖子

那应该说明,线程数是“资源相关”的啦!

论坛徽章:
0
9 [报告]
发表于 2007-09-30 16:30 |只看该作者
那用的是32bit系统吧!   那个数差不多了
64bit的要好的多。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP