linux进程总数和线程总数,linux中一个进程的最大线程数量是多少?

一个没有调用 fork 的程序应该算作一个进程吧

那么在这个程序中最大的线程数目是多少呢?

我建立了 200 多个线程后就出现错误 Segmentation fault 了

man 3 pthread_create 中提到

RETURN VALUE

On success, the identifier of the newly created thread is stored in the

location pointed by the thread argument, and a 0 is returned. On error,

a non-zero error code is returned.

ERRORS

EAGAIN not enough system resources to create  a  process  for  the  new thread.

EAGAIN more than PTHREAD_THREADS_MAX threads are already active.

PTHREAD_THREADS_MAX 在我的系统中的数值是 16384

系统资源怎么计算呢???

找了好久也没有找到答案,请各位大虾指点迷津

|

看到ulimit -a的结果了吗?

stack size            (kbytes, -s) 8192

每个线程的栈要占8M,你是开到差不多256个线程的时候没内存的,算算,8M*256=2G,所以没空间了啊。

你可以用ulimit -s 256 然后再运行看看。

|

在slackware下执行成功,PTHREAD_THREADS_MAX=1024,在1021时返回EAGAIN,ret=11

你的程序在创建到第254号时,返回ret=12,查一查errno.h,你就会发现是:

#define EAGAIN      11  /* Try again */

#define ENOMEM      12  /* Out of memory */

说明在达到线程数量限制前,就已经没可用内存了。。。

然后,只创建了到253号,也就是t[i]中只有0-253有效,当然pthread_cancel第254号当然会出错啊。

|

这个是由你操作系统的设置决定的。

|

如果线程超过最大限制,函数会返回EAGAIN,Segmentation fault 应该是其他原因造成得,系统得最大线程数取决于操作系统得设定,每个线程当然会消耗一定得资源,如果设得太大了,也会由于资源耗尽而无法达到最大线程数得。

|

redhat 9.0 默认为253个线程+主线程+守护管理线程=255

但你可以通过系统参数进行调整,同时也要修改相关头文件

#define PTHREAD_THREADS_MAX     1024

在你的头文件中定义:

#ifdef PTHREAD_THREADS_MAX

#undefine PTHREAD_THREADS_MAX

#define PTHREAD_THREADS_MAX  1024

#endif

|

不同系统,不同版本都不一样的

可以用ulimit -a看/修改.

|

我这也出现和楼主一样的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值