getrlimit()返回错误的值? [英] getrlimit() returns wrong value?

查看:78
本文介绍了getrlimit()返回错误的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以向我解释为什么以下程序创建7185个线程而不是7455个线程吗?

Can someone explain to me why the following program creates 7185 threads instead of 7455?

void *thr_crt(void *arg)
{
    sleep(64);
    return 0;
}

int main(void)
{
    struct rlimit lim;
    int err;
    int i;

    pthread_t tid;

    if(getrlimit(RLIMIT_NPROC, &lim) < 0)
        perror("getrlimit error"), exit(1);

    i = 1;
    while(pthread_create(&tid, NULL, thr_crt, NULL) == 0)
        i++;

    printf("soft limit: %d\n", lim.rlim_cur);
    printf("hard limit: %d\n", lim.rlim_max);
    printf("threads %d\n", i-1);

    return 0;
}

输出:

软限制:7455
硬限制:7455
线程7185

soft limit: 7455
hard limit: 7455
threads 7185

它不应该创建7455个线程吗?

It should not create 7455 threads?

推荐答案

每个真实"用户ID而不是每个进程的最大线程数RLIMIT_NPROC是(IIRC),因此每个进程的线程数都略低是有道理的,因为具有相同真实"用户ID或已采取某种保护措施以防止资源快速耗尽的其他已经运行的进程.

The maximum thread number RLIMIT_NPROC is (IIRC) per "real" user id and not per process, so it makes sense that it is somewhat lower per process either because of other already running processes with the same "real" user id or as some sort of protection against rapid resource exhaustion.

这篇关于getrlimit()返回错误的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆