2016-04-03 3 views
0

return pのプログラムでは、pthread_exit(p)と同じ出力が得られます。次にpthread_exit()を使用する理由は?returnを使うときにpthread_exit()を使うのはなぜですか?

void *foo(void *p){ 
    *((int *)p) += 1; 
    pthread_exit(p); 

} 

int main() 
{ 
    pthread_t t; 
    int i=9; 
    int *j; 
    pthread_create(&t,NULL, foo, &i); 
    pthread_join(t,(void**)&j); 
    printf("%d\n",*j); 
} 
+0

この値は結合可能であれば結合するスレッドで利用でき、 'pthread_cleanup_push'で登録されたハンドラはすべてポップされます。http://man7.org/linux/man-pages/man3/pthread_exit.3.htmlを参照してください。 –

+0

もう1つ理由:スレッドを開始したとします。そのスレッドはあなたの関数のうちの1つを呼び出し、別の関数を呼び出しますが、この関数は回復不能なエラーの結果として失敗します。その関数から戻り、実行を継続する代わりに、スレッドが終了するというエラー状態の戻り値を確認する代わりに、その関数から 'pthread_exit()'を呼び出すことができます。これは同じ理由で 'exit()'を呼び出すシングルスレッドのプログラムとあまり変わりません。戻り値ポインタを渡す必要があるという事実を除けば、それだけです。 –

答えて

2

pthread_exit()メインプログラムのために何であるかexit()スレッドのです。

returnを使用していつでもメインプログラムを終了できますか? 私はそうは思わない。このため、exit()pthread_exit()が存在します。

スレッドのmain関数から返すと、暗黙的にpthread_exit()が呼び出されます。この関数は、スレッドをどのように終了しても呼び出されます。スレッドのクリーンアップを担当します。

しかし、機能foo()呼び出しがbar()bar()はそれがスレッドを終了しなければならないことを決定機能ならば、それはbar()から戻ってfoo()での戻り値をチェックするよりも、pthread_exit()を呼び出すために、より便利です。 returnの煩さは、チェーン内のコールの数が増えると大きくなります。

関連する問題