2016-05-19 18 views
0

次のCコードを実行すると、プログラムがハングし、信号(CTRL-Cを含む)に応答しません。pthread_exit(0)がプログラムをハングアップするのはなぜですか?

int main() 
{ 
    pthread_exit(0); 
    return 0; 
} 

何故でしょうか?

他のスレッドが作成され実行されているときの動作は正常ですが、pthread_exit(0)を使用する前に常にチェックする必要があるかどうかを知りたいと思います。

編集: これはハングする完全なコードです。しかし、私はglib(-lglib-2.0)でビルドしていました。単純にcc -o fooを使用するfoo.cは期待通りに動作します。

+3

ハングしますか?あなたはそれを終えた!あなたのプロセスにはローダーによって作成されたスレッドが1つしかなく、終了しました:( –

+0

これは*完全なコードですか(それがハングするのですか?)それからあなたが話す*他のスレッド*は何ですか? –

+0

Can not '-lglib-2.0'の有無にかかわらずここで再現してください。 – davmac

答えて

0

ご使用のケース全体が、pthread_exit man pageのノートに記載されています。 あなたの場合、OPを正しく編集すると、glibが別のスレッドを開始しました。あなたはメインスレッドを終了し、他のスレッドは実行を続けました。これをハングとしてラベル付けしました。 一般に、アプリケーションを完全に終了する場合は、exitを使用するか、main()から返すだけです。

デタッチされたスレッドのような追加のマジックが必要な場合にのみ、メインスレッドでpthread_exit()を使用してください。

+0

manページにOPで記述されている動作に関連するものは何も書かれていないと思うのですが、glibで動作を再現できません。 –

関連する問題