C setrlimit()不会更改值

C setrlimit()不会更改值,c,C,我的计算机每个进程接受380个线程。我尝试使用settlimit()增加到一个更大的数字,但得到了预期的结果 如何增加进程数 以下代码无法正常工作: #include <stdio.h> #include <string.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #include <sys/time.h> #inc

我的计算机每个进程接受380个线程。我尝试使用settlimit()增加到一个更大的数字,但得到了预期的结果

如何增加进程数

以下代码无法正常工作:



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

    #include <sys/time.h>
    #include <sys/resource.h>
    #include <errno.h>

    void *doSomeThing()
    {
        pthread_detach(pthread_self());
        sleep(1);
        pthread_exit(NULL);
    }

    int main(void)
    {
        struct rlimit rlim;
        pthread_t tid;
        int i;

        if (getrlimit(RLIMIT_NPROC, &rlim) != 0) {
            printf("Can't call getrlimit(): [%s]\n", strerror(errno));
            exit(0);
        }

        rlim.rlim_cur = 1000;
        rlim.rlim_max = 1200;
        if (setrlimit64(RLIMIT_NPROC, &rlim) != 0) {
            printf("Error: getrlimit()\n");
            exit(0);
        }

        /* Create threads */
        for (i=0; i<385; i++)  {
            if (pthread_create(&tid, NULL, doSomeThing, NULL) != 0)
                printf("Can't create thread %d:[%s]\n", i, strerror(errno));
        }
    }


#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
void*doSomeThing()
{
pthread_detach(pthread_self());
睡眠(1);
pthread_exit(NULL);
}
内部主(空)
{
结构rlimit-rlim;
pthread_t tid;
int i;
如果(getrlimit(RLIMIT\u NPROC,&rlim)!=0){
printf(“无法调用getrlimit():[%s]\n”,strerror(errno));
出口(0);
}
rlim.rlim_cur=1000;
rlim.rlim_max=1200;
如果(setrlimit64(RLIMIT\u NPROC,&rlim)!=0){
printf(“错误:getrlimit()\n”);
出口(0);
}
/*创建线程*/

对于(i=0;i减小pthread堆栈的大小,这将允许您在系统上安装更多线程

pthread_attr_init(&attr);
assert(pthread_attr_setstacksize(&attr, 1<<16) == 0);
for (i=0; i<2048; i++) 
    assert(pthread_create(&tid, &attr, doSomeThing, NULL) == 0);

减小pthread堆栈的大小,这将允许您在系统上安装更多线程

pthread_attr_init(&attr);
assert(pthread_attr_setstacksize(&attr, 1<<16) == 0);
for (i=0; i<2048; i++) 
    assert(pthread_create(&tid, &attr, doSomeThing, NULL) == 0);

奇怪,我也看到了问题,实际允许的线程数小于setrlimit中请求的线程数,与请求的线程数无关奇怪,我也看到了问题,实际允许的线程数小于setrlimit中请求的线程数,与请求的线程数无关