Может кто-нибудь объяснить мне, почему следующая программа создает 7185 потоков вместо 7455?getrlimit() возвращает неправильное значение?
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?
Просто примечание: не является ли тип 'rlim_t' неподписанным? –