pthread_create()的返回码是11

我试图运行一个简单的multithreading编程,我从gcc得到这个错误

pthread_create()的返回码是11

我该如何解决这个问题?

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

那么,你可以从确定错误实际意味着什么开始。 根据这个和这个 (其他资源会告诉你相同的信息,这只是一个例子),数字11代表EAGAIN ,这反过来意味着“系统缺乏创建另一个线程的必要资源,或系统强加的限制一个进程中的线程总数将超过PTHREAD_THREADS_MAX。“

这与您尝试创建20.000(!)个线程的事实相符。 创建更少的线程,或等到线程完成后再开始新的线程。

请注意,可以创建的最大线程数取决于您的系统(甚至可能取决于许多其他设置)。 谷歌如果你真的需要知道“如何找到PTHREAD_THREADS_MAX”。

但是,除非这只是一个微不足道的例子(或者甚至可能),你可能想要研究线程池和队列的概念。