Le code retour de pthread_create () est 11

J’essaie de lancer une programmation multi-threadée simple et j’obtiens cette erreur de gcc

Le code retour de pthread_create () est 11

Comment puis-je résoudre ce problème?

#include  #include  #include  #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); } 

Eh bien, vous pouvez commencer par déterminer ce que l’erreur signifie réellement. Selon ceci et cela (d’autres ressources vous diront la même information, il ne s’agit que d’un exemple), le numéro 11 signifie EAGAIN ce qui signifie “Le système manquait des ressources nécessaires pour créer un autre thread ou la limite imposée par le système. sur le nombre total de threads dans un processus, PTHREAD_THREADS_MAX serait dépassé. “.

Cela correspond au fait que vous essayez de créer 20 000 (!) Threads. Créez moins de threads ou attendez que les threads soient terminés avant d’en créer de nouveaux.

Notez que le nombre maximal de threads pouvant être créés dépend de votre système (et peut-être même dépend d’un certain nombre d’autres parameters). Google pour “Comment trouver PTHREAD_THREADS_MAX” si vous avez vraiment besoin de savoir.

Cependant, à moins qu’il ne s’agisse là d’un exemple sortingvial à explorer (ou peut-être même à ce moment-là), vous souhaiterez peut-être examiner le concept de pools de threads et de files d’attente .