2012-02-13 12 views
0

私は何が間違っているのか分かりません。 Iは、シリアルからのコマンドを待機モードで待機開始時に3つのスレッドpsでの脅威スレッド(cで書かれたスレッドプログラムの場合)

[[email protected] /]# ps 
1111 root  608 S fw634c_d_cdm_sb 
1112 root  608 S fw634c_d_cdm_sb 
1113 root  608 S fw634c_d_cdm_sb 

を開始スレッドアプリケーションを有しています。 実行してスタンバイモードに戻ると、私はpsの動作をチェックします。 (あまりにもsq.bracketedされ、ファイル名)アプリケーションのzombiefiedインスタンス

1114 root   Z [fw634c_d_cdm_sb] 
... 
... 
... 
1768 root   Z [fw634c_d_cdm_sb] 

およそ628それらのがあります。 - 気にしない(彼らは完了した後に自分でリソースを終了し、自由になる)

-for合流可能スレッド

-for取り外し可能なスレッド:

事は、私は、次のよポリシーがあり、 です - pthread_createを実行した後でpthread_joinを実行し、スレッド関数が完了するのを待ちます。このように:

 if (pthread_create(&tmp_thrd_id,&attr_joinable,run_function,(void *)&aStruct)!=0){ 
      DEBUG(printf("thread NOT created \n")); 
     }else{ 
      DEBUG(printf("thread created !\n")); 

      if (pthread_join(tmp_thrd_id,NULL)!=0){ 
       DEBUG(printf("\nERROR in joining \n")); 
      }else{ 
          DEBUG(printf("Thread completed\n")); 
      } 
     } 

私は多くを行うと、起動はちょうどそれが殺されてはならないという理由だけで周りに位置した後にされませんメインでpthread_exit(NULL)を、実行します。

私はおそらくここで重要なことを忘れています。しかし

+0

600スレッド?他の場所で 'pthread_create'を呼び出していますか? – cnicutar

+2

あなたはどのOSですか?あなたが観察した偽のpthreadの動作とpsの出力から判断すると、私はLinuxThreadsでLinux 2.4を推測するつもりですが、これは本当に質問の一部でなければなりません。 –

+0

@cnicutarはいスレッドが作成されます。 – nass

答えて

0

A「ゾンビ」のスレッドが終了したスレッドである、とするために誰かのために周りに待っている

はあなたの助けをありがとうございました....スレッドでいくつかの基本的なガイドを読んだ後、何を明確にすることはできませんpthread_joinを呼び出して終了ステータスを収集します。だからあなたのプログラムのどこかでスレッドを作成していて、最終的にこれらのスレッドに対してpthread_joinまたはpthread_detachを呼び出さないようにします。

+0

も私の前提でしたが、私はコードを二重チェックしました。最終的には、エラーが発生したというライブラリの不一致が原因でした。 – nass

関連する問題