有人可以向我解释为什么以下程序会创建7185个线程而不是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
它不应该创建7455个线程?
答案 0 :(得分:3)
最大线程数RLIMIT_NPROC是(IIRC)per&#34; real&#34;用户ID,而不是每个进程,所以它是有意义的,因为其他已经运行的进程具有相同的&#34;真正的&#34;用户ID或某种防止快速资源耗尽的保护。
答案 1 :(得分:1)
检查/proc/sys/kernel/threads-max
,因为它可能低于允许的进程。