pthread_join c 中的函数
pthread_join function in c
我对pthread_join()有疑问,希望大家解答。
我是下面的程序运行,有一行要打印出来。之后,我试图删除“pthread_join(th,&val),并且没有要打印的行。
我在程序中找到了所有功能,但我不明白为什么。
你能帮我吗,我很感激所有的答案。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define SMALL_STACK 131072
pthread_attr_t thread_attr;
void* fn(void* arg);
int main(int argc, char** argv)
{
pthread_attr_init(&thread_attr);
pthread_attr_setstacksize(&thread_attr, SMALL_STACK);
pthread_t th;
pthread_create(&th, &thread_attr, fn, (void*)14);
void* val;
pthread_join(th, &val);
return 0;
}
void* fn(void* arg)
{
printf("arg = 0x%x\n", (int)arg);
return NULL;
}
是的,这就是 pthread_join
的目的。它让调用线程等待创建的线程完成其工作。如果你没有它,你的 main
线程会在你的 fn
线程有机会打印之前终止整个过程。
如果出于某种原因您想终止 main
线程并保留进程 运行 的所有其他线程,您必须使用 pthread_exit
终止它,而不是使用return
语句或调用 exit
.
我对pthread_join()有疑问,希望大家解答。 我是下面的程序运行,有一行要打印出来。之后,我试图删除“pthread_join(th,&val),并且没有要打印的行。
我在程序中找到了所有功能,但我不明白为什么。
你能帮我吗,我很感激所有的答案。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define SMALL_STACK 131072
pthread_attr_t thread_attr;
void* fn(void* arg);
int main(int argc, char** argv)
{
pthread_attr_init(&thread_attr);
pthread_attr_setstacksize(&thread_attr, SMALL_STACK);
pthread_t th;
pthread_create(&th, &thread_attr, fn, (void*)14);
void* val;
pthread_join(th, &val);
return 0;
}
void* fn(void* arg)
{
printf("arg = 0x%x\n", (int)arg);
return NULL;
}
是的,这就是 pthread_join
的目的。它让调用线程等待创建的线程完成其工作。如果你没有它,你的 main
线程会在你的 fn
线程有机会打印之前终止整个过程。
如果出于某种原因您想终止 main
线程并保留进程 运行 的所有其他线程,您必须使用 pthread_exit
终止它,而不是使用return
语句或调用 exit
.