スレッドを作成するときにメソッドpthread_exit(NULL)
でメソッドを使用するのはなぜですか?main()
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *message(void *arg){
char *myMessage = (char*)arg;
printf("%s\n", myMessage);
}
int main(void){
pthread_t arr[2];
char *messages[2] = {"Hello", " World"};
if( pthread_create(&arr[0], NULL, message, &messages[0]) != 0 ){
printf("Creating thread failed");
}
if( pthread_create(&arr[1], NULL, message, &messages[1]) != 0 ){
printf("Creating thread failed");
}
pthread_exit(NULL); -> WHY
}
答え1
この内容は次のように記録されます。このpthread_exit(3)
ヘルプページ:
他のスレッドが引き続き実行されるようにするには、基本スレッドが
pthread_exit()
次を呼び出す必要があります。exit(3)
。
デフォルトでは、スレッドを起動すると、現在実行中の「コンテキスト」もスレッドです。新しいスレッドの寿命はメインスレッドに接続されない可能性があるため、main
関数を終了する必要があります。pthread_exit()
それ以外の場合、呼び出しは終了しexit()
(から返された後に発生しますmain
)、これはすべてのプロセススレッドを停止します。
最後に、main
他のスレッドの戻り値を提供することには注意を払わないので、のNULL
引数を使用しますpthread_exit()
。
答え2
からman pthread_exit
:
他のスレッドが引き続き実行されるようにするには、exit(3)の代わりにpthread_exit()を呼び出してメインスレッドを終了する必要があります。
exit()
これから私は(または単にからmain
)戻るとプロセス(および他のすべてのスレッド)はすぐに終了しますが、呼び出しは他のスレッドがタスクをpthread_exit()
完了するまでプロセスの終了を遅らせるという結論を下しました。