pthread_exit(void *retval)

来源:互联网 发布:golang 1.9 java比较 编辑:程序博客网 时间:2024/05/22 06:52

    用法:#include  <pthread.h>

    功能:使用函数pthread_exit退出线程,这是线程的主动行为;由于一个进程中的多个线程是共享数据段的,因此通常在线程退出之后,退出线程所占用的资源并不会随着线程的终止而得到释放,但是可以用pthread_join()函数(下篇博客中讲到)来同步并释放资源。

    说明:retval:pthread_exit()调用线程的返回值,可由其他函数如pthread_join来检索获取。

/*thread.c*/  #include <stdio.h>  #include <pthread.h>    /*线程一*/  void thread_1(void)  {      int i=0;      for(i=0;i<=6;i++)      {          printf("This is a pthread_1.\n");          if(i==2)              pthread_exit(0);                      //用pthread_exit()来调用线程的返回值,用来退出线程,但是退出线程所占用的资源不会随着线程的终止而得到释放          sleep(1);      }  }    /*线程二*/  void thread_2(void)  {      int i;      for(i=0;i<3;i++)          printf("This is a pthread_2.\n");               pthread_exit(0);                              //用pthread_exit()来调用线程的返回值,用来退出线程,但是退出线程所占用的资源不会随着线程的终止而得到释放  }    int main(void)  {      pthread_t id_1,id_2;      int i,ret;  /*创建线程一*/      ret=pthread_create(&id_1,NULL,(void  *) thread_1,NULL);      if(ret!=0)      {          printf("Create pthread error!\n");      return -1;      }  /*创建线程二*/       ret=pthread_create(&id_2,NULL,(void  *) thread_2,NULL);      if(ret!=0)      {          printf("Create pthread error!\n");      return -1;      }  /*等待线程结束*/      pthread_join(id_1,NULL);      pthread_join(id_2,NULL);      return 0;  }  


     

以下是程序运行结果:

   备注:pthread库不是Linux系统默认的库,连接时需要使用静态库libpthread.a,所以线程函数在编译时,需要连接库函数,如上图    gcc pthread_create.c -o pthread_create -lpthread

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   #include <pthread.h>   #include <stdio.h>   #include <sys/types.h>      void *a();   int main()   {           pthread_t  fd;           char *b;            pthread_create(&fd,NULL,a,NULL);         pthread_join(fd,(void *)&b);            printf("%s",b);          return 0;   }   void *a()   {            char  *p="asdf";            pthread_exit(p);   }