线程创建

线程创建

为什么创建线程时要使用方法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()将推迟进程终止,直到其他线程完成其工作。

相关内容