线程退出中exit 和pthread_exit的区别
进程的终止可以通过在主函数main()中直接调用exit、return,或者通过进程中的任何其它线程调用exit来实现。在任何一种情况下,该进程的所有线程都会终止。
而pthread_exit函数则是使调用改函数的线程中止运行,并且允许线程传递一个指针。它的形式为:
void pthread_exit(void *value_ptr) ;
连接了这个线程可以获得参数value_ptr的值。回顾前面介绍的pthread_join函数,这个函数的参数void **value_ptr,正是保存pthread_exit函数的参数void *value_ptr的地址。这里要注意,pthread_exit的参数value_ptr必须指向线程退出后仍然存在的数据。
例1
#include <unistd.h>
#include <semaphore.h>
#include <sys/types.h>
#include <dirent.h>
#include <pthread.h>
#include <errno.h>
#include <signal.h>
#include <time.h>
#include <stdio.h>
void * thread_child(void *arg)
{
while(1)
{
usleep(500*1000);
printf("thread_child running!\n");
}
return NULL;
}
int main(int argc,char** argv)
{
pthread_t tid;
int i = 0;
pthread_create(&tid, NULL, (void*)thread_child, &i);
for(i=0;i<5;i++)
{