一般情形是主线程创建thread object后做自己的工作而不是简单停留在创建的线程上。thread::join()是个简单暴力的方法,主线程等待子线程期间,join后面的语句都要等子线程执行完毕后才能执行。子线程执行完毕后,thread::join()还会清理子线程相关的内存空间。
thread_join.c源代码:
#include <pthread.h> //pthread_join()
#include <unistd.h> //sleep()
#include <stdio.h> //printf()
void *thread(void *str) //返回指针值的函数
{
int i;
for (i = 0; i < 3; ++i)
{
1 sleep(2);
printf( "This in the thread : %d\n" , i );
}
return NULL;
}
int main()
{
pthread_t pth;
int i;
int ret = pthread_create(&pth, NULL, thread, (void *)(i));
2 pthread_join(pth, NULL);
printf("123\n");
for (i = 0; i < 3; ++i)
{
3 sleep(1);
printf( "This in the main : %d\n" , i );
}
return 0;
}
//1:(注释掉1时)
由于有2的存在所以线程pth,再返回到进程。
运行结果:
tu1
//2:(注释掉2时)是进程先打印,但是线程pth会插入以下,这个和1有密切关系:1时间长了可能差不进去
把1注释掉,那么会插进去的。
tu2
//3:(注释掉3时)
因为有2存在所以结果和//1一样。