pthread_join函数

函数简介

函数pthread_join用来等待一个线程的结束。函数原型为:

extern int pthread_join (pthread_t__th, void **__thread_return);

第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。如果执行成功,将返回0,如果失败则返回一个错误号。

linux中的应用

Linux中,默认情况下是在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设置Threads attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源,详细资料查看Threads attributes。

其实在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。不过这个copy过程和fork不一样。 copy后的进程和原先的进程共享了所有的变量,运行环境。这样,原先进程中的变量变动在copy后的进程中便能体现出来。

pthread_join的应用

pthread_join使一个线程等待另一个线程结束。

代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。

所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号

pthread_join函数,布布扣,bubuko.com

时间: 2024-12-22 11:00:46

pthread_join函数的相关文章

关于pthread_join函数在使用时如何不阻塞主线程的一种探索

pthread_join 函数是会阻塞主线程的,这会让很多java程序员不适应.因为在java中 start以后一个线程就执行执行了.主线程不会被阻塞. 而在linux中 join是会阻塞的. 那么如何使用join的时候 不阻塞主线程呢.我给出了一个解决方法. #include <stdio.h> #include <pthread.h> void *print_count(int c); void thread_start(); int main(int argc, char c

pthread_exit&amp;&amp;pthread_join函数

1 #include <pthread.h> 2 #include <unistd.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <string.h> 6 #include <error.h> 7 8 void *thr_fn1(void *arg) 9 { 10 printf("thread 1 returning\n"); 11 return(

pthread_join和pthread_detach的用法

//从别处拷贝过来的,只作为自己查看方便,原作者不详,请谅解. 一:关于join join join是三种同步线程的方式之一.另外两种分别是互斥锁(mutex)和条件变量(condition variable). 调用pthread_join()将阻塞自己,一直到要等待加入的线程运行结束. 可以用pthread_join()获取线程的返回值. 一个线程对应一个pthread_join()调用,对同一个线程进行多次pthread_join()调用是逻辑错误. join or detach 线程分两

Linux线程基础函数

1. 线程标识: (1) 比较两个线程ID: #include <pthread.h> int pthread_equal(pthread_t tid1, pthread_t tid2); ret-若相等则返回非0值,否则返回0值 (2) 获取线程自身ID: #include <pthread.h> pthread_t pthread_self(void); ret-调用线程的线程ID 2. 线程的创建: #include <pthread.h> int pthread

多线程之Linux编程(1)--常用函数

常用函数: 1.创建一个线程用pthread_create()函数.如果成功返回0. int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (start_routine)(void*), void *arg); 2.退出方式: a. return返回 b. exit()函数,   函数原型 void exit(int status); c. pthread_exit函数,   函数原型void pthre

《APUE》中的函数整理

第1章 unix基础知识 1. char *strerror(int errnum) 该函数将errnum(就是errno值)映射为一个出错信息字符串,返回该字符串指针.声明在string.h文件中. 2.void perror(const char *s) 该函数基于当前的errno值,在标准出错文件中输出一条出错消息,然后返回.声明在stdio.h文件中.它首先输出由s指向的字符串,然后是一个冒号,一个空格,接着是errno值对应的出错信息,最后是一个换行符. 第2章 UNIX标准化及实现

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

 1  pthread_create()函数 创建线程 A:依赖的头文件 #include<pthread.h> B:函数声明 int pthread_create(pthread_t *thread, constpthread_attr_t *attr, void *(*start_routine) (void *), void *arg); pthread_t *thread:传递一个pthread_t变量地址进来,用于保存新线程的tid(线程ID) const pthread_att

pthread_join

头文件 : #include <pthread.h> 函数定义: int pthread_join(pthread_t thread, void **retval); 描述 : pthread_join()函数,以阻塞的方式等待thread指定的线程结束.当函数返回时,被等待线程的资源被收回.如果进程已经结束,那么该函数会立即返回.并且thread指定的线程必须是joinable的. 参数 : thread: 线程标识符,即线程ID,标识唯一线程. retval: 用户定义的指针,用来存储被等

linux pthread pthread_create pthread_join pthread_detach

linux 下面默认 pthread_create 由调用者自己负责子线程的资源回收 当父线程退出时候,子线程也会跟着退出,所以父线程推出的时候要调用pthread_join函数阻塞等待子线程的退出 pthread_detach( tid)  使线程tid 的线程处于分离状态,线程处于分离状态是该线程终止的时候资源被回收,不然的话该终止的子线程会占用系统资源直到父线程调用pthread_join 1 父线程先与子线程终止 此时: 如果子线程已近与父线程分离,如调用pthread_datach ,