pthread_exit函数
- 功能:将单个线程退出
- void pthread_exit(void *retval);
- 参数:retval表示线程退出状态,通常传NULL
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
void *thrd_func(void*arg)
{
prrintf("In thread;thread id=%lu,pid=%d\n",pthread_self(),getpid());//子线程id
return NULL;
}
int main()
{
pthread_t tid;
int ret;
printf("In main 1:thread id=%lu,pid=%u\n",pthread_self(),getpid());//主控线程id
ret=pthread_create(&tid,NULL,thrd_func,NULL);//主控线程
if(ret!=0)
{
printf("pthread_create error\n");
exit(1);
}
printf("In main 2:thread id=%lu,pid=%u\n",pthread_self(),getpid());
pthread_exit(NULL);//主控线程退出,子线程不受影响
}
输出:
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
void *thrd_func(void*arg)
{
int i=*((int*)arg);
sleep(i);//为了使创建的线程有先后顺序
prrintf("I'吗%d thread;thread id=%lu,pid=%d\n",i+1,pthread_self(),getpid());//子线程id
return NULL;
}
int main()
{
pthread_t tid;
int ret,i;
for(i=0;i<5;i++)
{
pthread_create(&tid,NULL,thrd_func,(void *)&i);//主控线
}
printf("I am main,and I am not a process,I'm a thread!\n""main_thread_ID=%lu",pthread_self());
pthread_exit(NULL);//主控线程退出,子线程不受影响
}
输出:
从这里可以看出,用循环因子区分子线程,不是很可取