Phtead_join 线程等待|学习笔记

简介: 快速学习 Phtead_join 线程等待

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Phtead_join 线程等待】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11060


Phtead_join 线程等待

 

内容介绍

一、回顾

二、前景提要

三、线程等待

四、验证

 

一、回顾

Thread_fun1和therad_fun2遗漏了返回值,该线程函数返回指针,在待返回值的下面添加return null,暂且返回空指针。当执行ruturn 的时候,在主线程中,可以拿到线程的返回值。

 

二、前景提要:

1.在之前的代码中,在main函数中创建2个pthread_create线程,并且在后方添加while(1);如果没有这句话,那么main函数结束,进程结束,线程也终止。

2.可以通过while(1)来进行等待线程的结束,类似于学进程的时候的wait,wait有两个功能,阻塞,等待子进程结束,第二个功能,当子进程退出的时候,回收子进程资源。

在线程当中也有类似函数,叫做pthread_join,类似于进程中的wait。

 

三、线程等待

1.Int pthread_join(pthread_t thread,void**retval);第一个参数代表等待哪一个子进程结束,等待线程结束,第二个参数代表指针的指针。

定义一个void*类型的变量,取地址传进去,Void**地址保存了该线程的返回值。

2. 功能:

等待子线程结束,并回收子线程资源。

3. 参数:

thread:被等待的线程号。

rerval:用来存储线程退出状态的指针的地址。

4. 返回值:成功返回0,失败返回非0;

 

四、验证

将刚才的代码中的while(1),改为ret=pthread_join(tid1,&tmp),并且定义void* tmp;

return 中的null,就会被保存在temp*类型的指针里面。要想改变tmp的值,必须更改tmp的 地址,将来就是*加地址,给tmp赋值。Tmp就保存了线程的返回值。不想保存存null即可。

成功返回0,失败返回非0,将程序补充完整。

if(ret!=0){

Perror(“pthread_join”);

Return 0;

}

以上则为有两个pthread_join等线程1和线程2。

image.png

在控制台输入./pthead可以成功输出100和hello world。

例2:

验证pthread_join的第二个参数是否是线程的返回值。

将while(1)改为for循环,并定义变量i和*str=“hello wold”,返回值由null改为str。

在进程结束前打印返回值,添加一句话:printf(“thread 1 end return:%s/n”,(char *)tmp);,以此来验证&tmp能否或者线程返回值。

运行查看结果,发现真的获取到了返回值:hello world,验证成功。

image.png

相关文章
|
3月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
131 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
3月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
379 0
|
5月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
6月前
|
Java C# Python
线程等待(Thread Sleep)
线程等待(Thread Sleep)
|
6月前
|
测试技术
三种等待方式(‌线程等待、‌隐式等待、‌显式等待)
三种等待方式(‌线程等待、‌隐式等待、‌显式等待)
293 4
|
7月前
|
安全 Java
使用notifyAll唤醒所有等待线程
使用notifyAll唤醒所有等待线程
|
6月前
|
安全 Java
使用notifyAll唤醒所有等待线程
使用notifyAll唤醒所有等待线程
|
7月前
|
Java
死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`
【6月更文挑战第20天】死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`volatile`保证变量的可见性和部分原子性,确保多线程环境中值的即时更新。与`synchronized`相比,`volatile`作用于单个变量,不保证原子操作,同步范围有限,但开销较小。`synchronized`提供更全面的内存语义,保证原子性和可见性,适用于复杂并发控制。
53 3
|
7月前
|
Java
使用notifyAll唤醒所有等待线程的方法与比较
使用notifyAll唤醒所有等待线程的方法与比较
|
8月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
64 3