pthread を開始し、後でこのスレッドが終了するのを待ってから戻るプログラムがあります。コードは次のようなものです。
int main(int32_t argc, char* argv[]) {
pthread_t t;
/* initialization and other stuff
...
*/
printf("join result:%d\n", pthread_join(t, 0));
return 0;
}
プログラムは、次のように出力しますjoin result: 0
。したがって、結合が機能し、tが終了します。それにもかかわらず、プログラムは実行を停止しません。exit(0)
行の前にコマンド(または他の番号)を挿入した場合にのみ、強制的に停止できreturn 0
ます。
ただし、pthread_join
呼び出しで行を削除すると、プログラムは問題なく終了します。
これはどのように可能ですか?すべてのサブスレッドが結合された後、プログラムの実行が終了しない原因は何ですか?
編集: gdb が、最後の行を}
. それにもかかわらず、私は舞台裏で何が起こっているのか分かりません:
Program received signal SIGSEGV, Segmentation fault.
0x000000060003aa10 in ?? ()