和多进程一样,多线程也有自己的等待函数。这个等待函数就是pthread_join函数。那么这个函数有什么用呢?我们其实可以用它来等待线程运行结束。
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
void func_1(void* args)
{
sleep(2);
printf("this is func_1!\n");
}
void func_2(void* args)
{
sleep(2);
printf("this is func_2!\n");
}
int main()
{
pthread_t pid1, pid2;
if(pthread_create(&pid1, NULL, func_1, NULL))
{
return -1;
}
pthread_join(pid1, NULL);
printf("this is end of func_1!\n");
if(pthread_create(&pid2, NULL, func_2, NULL))
{
return -1;
}
pthread_join(pid2, NULL);
printf("this is end of func_2!\n");
return 0;
}
编写wait.c文件结束之后,我们就可以开始编译了。首先你需要输入gcc wait.c -o wait -lpthread,编译之后你就可以看到wait可执行文件,输入./wait即可。
尝试在第二个线程之后,不加入pthread_join,直接printf,发现 this is end of func_2出现在this is func_2之前,即在进程结束前后面代码已经运行。