1

Linuxでは、メインスレッドがどのように終了しても、関数exit()によって、またはメインから戻ると、プロセス全体が終了します。メインスレッドがmain()から戻ると、crt.oなどとして知られる「Cランタイム」に戻ります。crt.oでは、そのcコードは次のようになります。exit(main(argc、argv)); exit()は
最終的にメインスレッドによって呼び出され、その結果、すべてのスレッドが終了します。

私の考えは正しいように見えますか?

crt.oでexit()がvoid thread_exit(int)のようなスレッド終了関数に置き換えられた場合、これは終了ステータスのスレッドのみを終了できます。crt.oのcソースコードはthread_exit(main(argc、 argv))、メインスレッドが終了しても他のスレッドは実行されますか?

4

2 に答える 2

6

fromに戻ることは、mainを呼び出すことと同じであり、プロセスexitを終了します。単一のスレッドのみを終了するには、を使用します。最初のスレッドが呼び出すことは有効であり(すべてのスレッドが終了するか、いずれかのスレッドが呼び出すまでプロセスは終了しません)、最初のスレッド以外のスレッドは、開始関数から戻った場合に暗黙的に呼び出すことに注意してください。pthread_exitpthread_exitexitpthread_exit

于 2012-04-18T07:11:18.710 に答える
4

UNIXでは、最後のスレッドが終了した後にプロセスが終了します。これは、「メイン」スレッドだけでなく、任意のスレッドである可能性があることに注意してください。したがって、exitをpthread_exitに置き換えても、mainに戻る前にスレッドを生成した場合、プロセスは終了しません。

于 2012-04-18T02:28:29.140 に答える