2011-09-12 20 views
0

Linuxシステムでpthreadを使用してスレッド同期に関する簡単なプログラムを試していました。私のプログラムのソースはhttp://pastebin.com/5EWS68NLです。スレッド同期 - プロセスの最大スレッド数

プログラムは、番号1をLIMIT(任意の数値)に昇順に印刷する必要があります。スレッドは各数値を出力するように割り当てられ、条件変数が通知されるまで待機し、数値を出力します。

プログラムは、LIMIT = 380になるまでうまく動作します。それ以上に、プログラムがハングします。つまり、pthread_create()はエラー番号を出力しようとしたためエラーを返しませんでしたし、エラーの場合はfflush(stdout)もインクルードしています。

システムの最大スレッド数は、/ proc/sys/kernel/threads-maxで指定できます。私はそれを任意に大きくして成功させようとしました。スレッドの数が約380であれば、プログラムは明らかにハングします。

これはどういう考えですか?この値 '380'はシステムによって異なりますか?

おかげで、よろしく、
Hrishikeshムラリ

答えて

0

は、私の周り32,000のスレッドの後、私が期待したものであるメモリの不足、上50000およびそれのエラーをするLIMITを変更しました。それ以外の場合は正常に動作します。

この小さな変更を行って、pthread_createエラーで実行を停止しました。あなたがエラーで停止していないので

if (ret_val) 
    { 
     printf("Couldn't create thread number %d - %s\n", iter, strerror(ret_val)); 
     fflush(stdout); 
     exit(1); 
    } 

は多分あなただけに終わったと 印刷番号を開始して、エラーメッセージが表示されませんでしたか?

とにかく、エラーはお使いのマシンに適用されます。スレッドはメモリを使用し、メモリは無限ではありませんが、380は少し低いようです。スレッドスタックのサイズがマシン上で高く設定されている可能性がありますか?

これはおもちゃプログラムであるため、pthread_createエラーが発生した後で印刷を開始するように変更してから、ループバックしてスレッドを再作成します。あなたはあなたのスレッドをpthread_joinするか、またはそれらを分離して作成する必要があります。

+0

ああ、大丈夫です。私はそれを試して、戻ってきます。 :-) –