Код возврата из pthread_create () - 11 - PullRequest
7 голосов
/ 12 августа 2011

Я пытаюсь запустить простое многопоточное программирование и получаю эту ошибку от gcc

Код возврата от pthread_create (): 11

как мне решить эту проблему?

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

#define NUM_THREADS     20000                           

void *PrintHello(void *threadid)                            
{                           
   long tid;                            
   tid = (long)threadid;                            
   printf("Hello World! It's me, thread #%ld!\n", tid);                         
   pthread_exit(NULL);                          
}                           

int main (int argc, char *argv[])                           
{                           
   pthread_t threads[NUM_THREADS];                          
   int rc;                          
   long t;                          
   for(t=0; t<NUM_THREADS; t++){                            
      printf("In main: creating thread %ld\n", t);                          
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);                            
      if (rc){                          
         printf("ERROR; return code from pthread_create() is %d\n", rc);                            
         exit(-1);                          
      }                         
   }                            

   /* Last thing that main() should do */                           
   pthread_exit(NULL);                          
}                           

1 Ответ

16 голосов
/ 12 августа 2011

Ну, вы могли бы начать с определения того, что на самом деле означает ошибка. Согласно это и это (другие ресурсы сообщат вам ту же информацию, это всего лишь пример), число 11 означает EAGAIN, что, в свою очередь, означает «системе не хватает необходимые ресурсы для создания другого потока или системное ограничение на общее количество потоков в процессе PTHREAD_THREADS_MAX будет превышено. ".

Это соответствует тому факту, что вы пытаетесь создать 20 000 (!) Потоков. Создайте меньше потоков или дождитесь завершения потоков, прежде чем начинать новые.

Обратите внимание, что максимальное количество потоков, которое можно создать, зависит от вашей системы (и, возможно, даже зависит от ряда других настроек). Google для "Как найти PTHREAD_THREADS_MAX", если вам действительно нужно знать.

Однако, если только это не тривиальный пример игры (или, может быть, даже тогда), вы можете захотеть взглянуть на концепцию пулов потоков и очередей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...