zoukankan      html  css  js  c++  java
  • pthread_join()

    void pthread_exit(void *retval) 
    int pthread_join(pthread_t th, void **thread_return)

    pthread_join()的调用者将挂起并等待th线程终止,retval是pthread_exit()调用者线程(线程ID为th)的返回值,
    如果thread_return不为NULL,则*thread_return=retval。
    需要注意的是一个线程仅允许唯一的一个线程使用 pthread_join()等待它的终止,并且被等待的线程应该处于可join状态,即非DETACHED状态
    ------------------------
    for (i = 0; i < 10; i++)
    {
      if (pthread_create((pthread_t *)&pthr[i].id, NULL, 
                (void *)thr_function, (void *)pthr[i]))
      {
        fprintf(stderr, "Create pthread error: %s ", strerror(errno));
        goto err_flg;
      }
    }

    for (i = 0; i < 10; i++)
    {
      if (pthr[i].id != 0)
        pthread_join(pthr[i].id, NULL);
    }

    相关1:pthread_join是为了防止主线程没有给其他线程执行的时间就返回了而设计的,
                 pthread_join(thread_t th,void ** thread_return )是使主线程等待th线程运行结束再运行
    相关2:有时候主线程创建子线程后,如果不使用pthread_join将自己阻塞,自己会先退出而程序结束,
                这样子线程的运行可能无法执行完毕就**退出了,这也算是要使用pthread_join的一个场景吧。

    相关3:pthread_join应该是用来回收线程资源的,当线程结束时调用,在一支程序中一直创建线程,而在
               线程结束时又没有用pthread_join则会造成资源不足,无法继续创建线程的情况.

    相关4:pthread_join回收线程资源,在pthread_create后父进程就可调用此函数,不过会阻塞父进程直到子进程结束。
               pthread_join()不会阻塞其他子进程。
               可以设置线程属性自动回收资源,就不用调用pthread_join了。
  • 相关阅读:
    ARC下的内存泄露
    iPhone 被同步到 Mac上后 如果不希望更新到Mac上在哪里删除?
    图像处理之基础---2个YUV视频 拼接技术
    多媒体开发之---H264 RTSP交互过程
    6410开发之---uboot
    数学和算法之---重温傅立叶
    多媒体开发之---h264 rtp打包
    多线程开发之---线程等待
    多媒体开发之---开源库ffmeg的log之子解析
    直升机的革命---鱼鹰运输机
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410078.html
Copyright © 2011-2022 走看看