为什么创建线程时要使用方法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
:
为了允许其他线程继续执行,主线程应该通过调用 pthread_exit() 而不是 exit(3) 来终止。
由此,我得出结论:(exit()
或简单地从main
)返回将立即终止进程(以及所有其他线程),而调用pthread_exit()
将推迟进程终止,直到其他线程完成其工作。