2012-04-18 7 views
1

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

私の考えは正しいようですか?

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

+0

質問を書くよりも、テストプログラムを書くほうが速いと感じています:) – sarnold

+1

@sarnold:テストプログラムを書くことは、まれにこのような質問に答える正しい方法ではありません。 –

答えて

6

mainからの返信は、exitを呼び出すことに相当し、のプロセスを終了します。 1つのスレッドだけを終了するには、pthread_exitを使用します。最初のスレッドがpthread_exitを呼び出すことは有効です(すべてのスレッドが終了するか、そのうちの1つがexitにコールされるまでプロセスは終了しません)。そして、最初のスレッド以外のスレッドは暗黙的にpthread_exitを呼び出します。

4

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

+0

exit()はプロセス内のすべてのスレッドを終了しませんか? –

+0

@MartinJames OPは、 'exit()'を 'pthread_exit()'に置き換えるとどうなるか知りたいです。 – JosephH

+0

はい、うん..やってみるのは奇妙なことです。 –

関連する問題