2012-01-11 7 views
1

pthread_exitreturn 0;より前にmain()に配置した場合、割り当てられたタスクが完了する前にスレッドが終了しなくなります。pthread_exitは、割り当てられたタスクが完了する前にスレッドの終了をどのように停止しますか?

の詳細はです。

私はスレッドが動作するはずだった関数にwhileループを入れました。 しばらくの間、条件が満たされずにプログラムが終了しました。 pthread_exitをreturn 0の前にメインに置くと、whileループはそのタスクを完了しました。したがって、質問です。

OS:Linuxの

+2

なぜ近い投票ですか? –

答えて

3

return文でmain()からの復帰がexit()を呼び出すことと同等である---それは、他のスレッドが終了するのを待たずに、処理を終了します。 (例えばabort()として、またはプロセスを終了し、別の関数)pthread_exit()を呼び出す

はちょうど(そのスレッドがmain()を実行している1であっても)それを呼び出すスレッドを終了し、ので、いくつかのスレッドのいずれかがexit()を呼び出すまで、他のスレッドが実行し続けます、またはすべてのスレッドが終了しました。

+1

'main()'は**機能**です。これは、プロセスの最初のスレッドでランタイムライブラリによって自動的に呼び出されます。 'pthread_create()'でさらにスレッドを作成すると、プロセス内に複数のスレッドが存在します。 'fork()'や 'system()'のような呼び出しだけで新しいプロセスを得ることができます。 –

+0

ありがとう、つまり、main()関数を実行するスレッドがプロセスによって作成されたことを意味しますか?そして、 'return'ステートメントは、1つのスレッドだけが呼び出しても' process'全体を終了します。残りのスレッドを保持するために、 'pthread_exit'を使用して呼び出しスレッドだけを終了させます。 –

+1

はい。プロセスを終了する 'main()'からのみ戻ります。他の関数からの戻り値は、その関数から返されます。 –

関連する問題