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);
}
この値は結合可能であれば結合するスレッドで利用でき、 'pthread_cleanup_push'で登録されたハンドラはすべてポップされます。http://man7.org/linux/man-pages/man3/pthread_exit.3.htmlを参照してください。 –
もう1つ理由:スレッドを開始したとします。そのスレッドはあなたの関数のうちの1つを呼び出し、別の関数を呼び出しますが、この関数は回復不能なエラーの結果として失敗します。その関数から戻り、実行を継続する代わりに、スレッドが終了するというエラー状態の戻り値を確認する代わりに、その関数から 'pthread_exit()'を呼び出すことができます。これは同じ理由で 'exit()'を呼び出すシングルスレッドのプログラムとあまり変わりません。戻り値ポインタを渡す必要があるという事実を除けば、それだけです。 –