LINUX.ORG.RU

Снова pthreads :((


0

0

Ничего не понимаю. Программлю под NPTL.
Имею вот такую программенцию: 

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

void *start(void *d) {
  printf("thread [%d]\n", (int)d);
  for(;;) {
    sleep(10);
  }
  return NULL;
}

int main() {
  int i, erк;
  pthread_t t;
  pthread_attr_t attr;
  size_t default_stacksize;
  
  pthread_attr_init(&attr);
  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  pthread_attr_setstacksize(&attr, 16 * 1024);

  for(i=0;;++i) {
    if((err=pthread_create(&t, &attr, &start, (void*)i)) != 0) {
      printf("Cannot create thread [%d]: %s\n", i, strerror(err)); 
      break;
    }
  }
  
  return 1;
}

Эта программа завершается при попытке создания 3030-го треда с ошибкой
EAGAIN (Resource temporarily unavailable). Если запустить ее
под рутом, позволяется создать 6050 тредов, а затем - та же ошибка.
Спрашивается: как же это так, если утверждатеся, что NPTL позволяет
создать тысячи и тысячи тредов? Откуда такие странные ограничения?
Что делать, если я хочу больше, чем 3000, скажем, 10000 тредов?
anonymous

Ну и запросы у вас батенька ;)
Попробовали б вы запустить такое количетсво тредов без ntpl.

Dead ★★★★
()
Ответ на: комментарий от Dead

Я понимаю. Но ведь новая модель вообще не должна содержать таких ограничений, разве нет? По моим представлением, должно позволяться создавать гораздо больше, чем 3000-6000 тредов.

anonymous
()
Ответ на: комментарий от anonymous

По поему есть как раз ограничение, MAX_THREADS чего то там, или как то так. Посмотри в мане по pthreads.

tukan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.