#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
struct test
{
int num;
int age;
};
void* callback(void * arg)
{
for(int i=0;i<5;++i)
{
printf("子线程:i=%d\n",i);
}
printf("子线程:%ld\n,pthread_self());
struct test* t=(struct test*)arg;
t->num=100;
t->age=60;
pthread_exit(&t);
return NULL;
}
int main()
{
struct test t;
pthread_t tid; //调用创建线程的函数,创建一个线程ID
pthread_create(&tid,NULL,callback,&t); //&t是将主线程的地址传递给函数callback,然后通
//过callback函数来完成子线程所需要实现的功能。当callback被调用之后,t作为实参来初始化形参
for(int i=0;i<5;i++)
{
printf("主线程:i=%d\n",i);
}
printf("主线程:%ld\n,pthread_self());
void *ptr;
pthread_join(tid,&ptr); //调用该函数会堵塞,等待子程序的退出;ptr指向pthread_exit()传
//递出来的t的地址;主线程执行到该行会一直等待子线程执行完毕并
//退出。
printf("num:%d, age=%d\n",t.num,t.age);
return 0;
}
运行结果: