gpt4 book ai didi

c - setrlimit() 不改变值

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:56 24 4
gpt4 key购买 nike

我的计算机接受每个进程 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));
}
}

最佳答案

减小 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 减少筹码量

rlim.rlim_cur=4096;
rlim.rlim_max=4096;
setrlimit64(RLIMIT_NPROC, &rlim);

关于c - setrlimit() 不改变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com