2011-08-12 6 views
5

は、私はシンプルなマルチスレッドプログラミングを実行しようとしていると私はGCCからのpthread_createから戻りコードは11

リターンコード()であるが、このエラーを取得していますで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);       
}       
+0

20000スレッドで何をしたいですか?クラスターにいますか? – RedX

+1

多くのスレッドを開始するには、デフォルトのスレッドスタックサイズを変更する必要があります。 – osgx

+0

osgxが言ったこと。 'pthread_attr_setstacksize'を参照してください。 –

答えて

14

さて、実際にエラーが何を意味するのかを判断することから始めましょう。 thisthisによると、他のリソースは同じ情報を示していますが、これは単なる例です)プロセス内のスレッドの総数PTHREAD_THREADS_MAXを超えてしまいます。 "

これは、あなたが20.000(!)スレッドを作成しようとしているという事実に一致します。新しいスレッドを開始する前にスレッドを少なくするか、スレッドが完了するまで待ちます。

作成できるスレッドの最大数は、システムによって異なります(また、他の設定の数によっても異なる場合があります)。あなたが本当に知っている必要があるならば、 "PTHREAD_THREADS_MAXを見つける方法"のためのGoogle。

しかし、これはちょっとしたことのほんの少しの例でない限り、thread pools and queuesの概念を調べるとよいでしょう。

+0

エラーコードをメッセージ(文字列など)に変換する関数はありますか? – LazerSharks

+0

@Gnuey http://stackoverflow.com/questions/503878/how-to-know-what-the-errno-meansを参照してください。 –

関連する問題