多线程pthread_join()的作用
pthread_join()函数原型:
int pthread_join(pthread_t thread, void **retval);
args:
pthread_t thread: 被连接线程的线程号
void **retval : 指向一个指向被连接线程的返回码的指针的指针
参数 :thread: 线程标识符,即线程ID,标识唯一线程。
retval: 用户定义的指针,用来存储被等待线程的返回值。可以是NULL。
return:
线程连接的状态,0是成功,非0是失败
当调用 pthread_join() 时,当前线程会处于阻塞状态,直到被调用的线程结束后,当前线程才会开始接着执行。当 pthread_join() 函数返回后,被调用线程才算真正意义上的结束,它的内存空间也会被释放(如果被调用线程是非分离的)。这里有三点需要注意:
- 被释放的内存空间仅仅是系统空间,你必须手动清除程序分配的空间,比如 malloc() 分配的空间。
- 一个线程只能被一个线程所连接。
- 被连接的线程必须是非分离的,否则连接会出错。
所以可以看出pthread_join()有两种作用:
- 用于等待其他线程结束:当调用 pthread_join() 时,当前线程会处于阻塞状态,直到被调用的线程结束后,当前线程才会重新开始执行。
- 对线程的资源进行回收:如果一个线程是非分离的(默认情况下创建的线程都是非分离)并且没有对该线程使用 pthread_join() 的话,该线程结束后并不会释放其内存空间,这会导致该线程变成了“僵尸线程”。
pthread_join的应用:
pthread_join使一个线程等待另一个线程结束。
代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。
所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。
多线程pthread_join()的作用相关推荐
- sleep 函数 linux 线程吗,sleep函数在多线程中的作用
1.前言 多线程中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依 ...
- ThreadLocal在多线程中的作用和原理浅析(模拟学生入学报到场景)
声明:本人菜鸟,发布这个帖子旨在抛砖引玉,不当之处肯定不少,请多指教. 无意中看到ThreadLocal这个类,学习一番以后发现用它解决一些多线程问题真是一个很好的思路和方法. 首先模拟一个场景: 学 ...
- GLUT及其函数的用法整理
GLUT - The OpenGL Utility Toolkit glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这 ...
- Linux多线程详解
线程也被称为轻权进程(lightweight process). 在传统的UNIX上,一个进程让另一个实体做某个事务是用fork派生子进程的方法处理的.派生子进程的代价比线程要昂贵得多,尤其是在父子进 ...
- 面试和学习必备--Java多线程
目录 一:多线程的基本概念 1.1什么是进程? 1.2什么是线程? 1.3多进程有什么作用? 1.4多线程有什么作用? 1.5java 程序的运行原理? 二:线程的创建和启动 2.1继承Thread类 ...
- java 锁旗标_Java多线程
Java多线程 1. 多线程存在的意义 多线程最大的作用就是能够创建"灵活响应"的桌面程序,而编写多线程最大的困难就是不同线程之间共享资源的问题,要使这些资源不会同时被多个线程访问 ...
- pthread_join()函数理解
pthread_t tid; 使用方式:pthread_join(tid,NULL); 为什么要使用pthread_join()? 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时 ...
- 多线程实现生产者消费者
1. Python多线程介绍 Python提供了两个有关多线程的标准库,thread和threading.thread提供了低级别的,原始的线程和一个锁.threading则是一个高级模块,提供了对t ...
- pthread_join()函数理解实验
原址 一.使用方式 pthread_t tid; pthread_create(&tid, NULL, thread_run,NULL); pthread_join(tid,NULL); 创建 ...
最新文章
- 201403-4 无线网络
- 莫言:不要在不喜欢你的人那丢掉快乐
- 如何找出标有App Store 精华,Essentials的所有软件?
- Selenium - 简介
- 5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good
- Java MathContext类| hashCode()方法与示例
- c#类属性和实例属性_Visual C#类和对象的创建方式,定义类,实例化对象,实例讲解...
- 从零开始学架构5 - 实战篇
- react启动命令_十分钟搭建React开发环境
- 同时调用函数和此函数的返回函数:func()()
- 本地Windows安装MySQL
- 使用Spring Boot开发邮件系统
- Android 开发横屏App或创建横屏布局
- 计算机怎么安错误,电脑安装软件时提示安装过程出错系统设置未被修改怎么办...
- 【学习笔记】成功解决:(字体问题)Package fontspec Error: The font “STXingkai“ cannot be found. \makecover
- Artificial Intelligence-人工神经网络
- 【读书笔记】之蔡康永的说话之道
- python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)
- 锐龙r74800h和i710750h差距大吗 r74800h和i710750h对比
- 肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC