pthread_join/pthread_exit用法实例

原创 2013年12月02日 16:52:02

函数pthread_join用来等待一个线程的结束。函数原型为:
  extern int pthread_join __P ((pthread_t __th, void **__thread_return));
  第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的线程将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为:
  extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));
  唯一的参数是函数的返回代码,只要pthread_exit中的参数retval不是NULL,这个值将被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。

实例:

/*myfile11-3.c*/


#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

pthread_t       tid1, tid2; 
void            *tret;

 

void *
thr_fn1(void *arg)
{
        sleep(1);//睡眠一秒,等待TID2结束。
        pthread_join(tid2, &tret);//tid1一直阻赛,等到tid2的退出,获得TID2的退出码
         printf("thread 2 exit code %d\n", (int)tret);
    printf("thread 1 returning\n");
    return((void *)2);
}

void *
thr_fn2(void *arg)
{      
    printf("thread 2 exiting\n");
     pthread_exit((void *)3);
}

int
main(void)
{
    int            err;

    err = pthread_create(&tid1, NULL, thr_fn1, NULL);
    if (err != 0)
        printf("can't create thread 1\n");
    err = pthread_create(&tid2, NULL, thr_fn2, NULL);
    if (err != 0)
        printf("can't create thread 2\n");
    err = pthread_join(tid1, &tret);//祝线程一直阻赛,等待TID1的返回。
    if (err != 0)
        printf("can't join with thread 1\n");
    printf("thread 1 exit code %d\n", (int)tret);
      //err = pthread_join(tid2, &tret);
    //if (err != 0)
    //    printf("can't join with thread 2\n");
//    printf("thread 2 exit code %d\n", (int)tret);
    exit(0);
}

 


命令:#gcc -lthread myfile11-3.c

        :#./a.out

运行结果:

thread 2 exiting
thread 2 exit code 3
thread 1 returning
thread 1 exit code 2

pthread_join/pthread_exit的用法解析

官方说法: 函数pthread_join用来等待一个线程的结束。函数原型为:   extern int pthread_join __P ((pthread_t __th, void **__thre...
  • modiziri
  • modiziri
  • 2014年12月16日 16:04
  • 9130

2线程原语:pthread_create(),pthread_self(),pthread_exit(),pthread_join(),pthread_cancel(),pthread_detach(

1  pthread_create()函数 创建线程 A:依赖的头文件 #include B:函数声明 int pthread_create(pthread_t *thread, const...
  • toto1297488504
  • toto1297488504
  • 2014年09月25日 16:36
  • 2966

Linux线程pthread_exit 和 pthread_join

pthread_exit(void *ptr) 函数使线程退出,并返回一个空指针类型的值。 pthread_join(pthread_t tid,void **rtval)调用此函数的进程/线程等i...
  • grantxx
  • grantxx
  • 2012年07月05日 22:24
  • 9662

linux学习值十四---线程终止pthread_exit()&pthread_join()

linux下有两种方式可以使线程终止。第一种通过return从线程函数返回,第二种通过调用函数pthread_exit()是线程退出。 pthread_exit()函数原型: #include...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014年11月07日 12:36
  • 3758

线程函数退出时候crash

解决办法 线程函数退出之前执行 pthread_exit() 原因分析 pthread_exit()退出当前线程,不退出子线程。 return 退出当前的线程,以及子线程。如果有子线程没有资源释...
  • zengyubao1
  • zengyubao1
  • 2016年05月06日 21:29
  • 549

linux posix 通过pthread_join获取线程pthread_exit返回的数据

#include #include typedef struct _foo { int a,b,c; }foo; void printfoo(foo* fp) { if(fp) pri...
  • a511244213
  • a511244213
  • 2015年12月10日 11:20
  • 521

Linux下多线程编程__线程的创建pthread_create与退出pthread_exit,等待当前线程退出pthread_join,获取线程ID pthread_self

Linux下多线程编程__线程的创建pthread_create与退出pthread_exit,等待当前线程退出pthread_join,获取线程ID pthread_self   2010-11-...
  • jiafu1115
  • jiafu1115
  • 2014年02月11日 11:00
  • 1506

pthread_exit 参数使用

原型: #include void pthread_exit(void *rval_ptr); 参数是个空类型的指针,这个函数的功能就是使一个线程正常退出,终止线程,因为我们知道线程它是依赖进程...
  • wangyezi19930928
  • wangyezi19930928
  • 2013年11月13日 21:13
  • 2298

pthread_join/pthread_exit

转自:http://www.cnblogs.com/stli/archive/2010/03/11/1683808.html         函数pthread_join用来等待一个线程的结束。函数...
  • happy803
  • happy803
  • 2012年12月11日 13:17
  • 518

linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线程总结

1、介绍API 1、pthread_create函数 函数简介 pthread_create是UNIX环境创建线程函数 头文件 #include 函数声明 int pthread_create(pt...
  • u011068702
  • u011068702
  • 2017年03月06日 21:33
  • 1434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pthread_join/pthread_exit用法实例
举报原因:
原因补充:

(最多只允许输入30个字)