注册线程清理函数|学习笔记

简介: 快速学习注册线程清理函数

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

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


注册线程清理函数

 

内容介绍

一、线程清理处理程序的定义

二、注册清理函数

三、弹出清理函数

四、执行清理函数的情况

 

一、线程清理处理程序的定义

和进程的退出清理一样,线程也可以注册它退出时要调用的函数,这样的函数称为线程清理处理程序(thread cleanup handler)。

注意:

线程可以建立多个清理处理程序。

处理程序在栈中,故它们的执行程序与它们注册的顺序相反。

 

二、注册清理函数

#include<pthrread.h>

void pthread_cleanup_push(void (*routine)(void*), void*arg);

//pthread_cleanup_push 注册清理函数

//void (*routine)(void*) 清理函数入口,传入函数地址,线程结束时执行清理函数

//arg 传给线程清理函数的参数

//routine 线程清理函数的指针

功能:将清理函数压栈。即注册清理函数。

注意:清理函数必须返回置为空。

 

三、弹出清理函数

#include<pthrread.h>

void pthread_cleanup_pop(int execute);

//pthread_cleanup_pop 弹出清理函数

//execute 线程清理函数执行标志位。

非0,弹出清理函数,执行清理函数。

0,弹出清理函数,不执行清理函数。

若调用该函数,则说明线程未结束。若线程结束,则清理函数按顺序进行。

 

四、执行清理函数的情况

当线程执行以下动作时会调用清理函数:

1、调用 pthread_exit 退出线程。

2、响应其它线程的取消请求。

3、用非零 execute 调用 pthread_cleanup_pop。

无论哪种情况 pthread_cleanup_pop 都将删除上一次 pthread_cleanup_push 调用注册的清理处理函数。

写代码时,写入一个 push ,就必须带有一个 pop ,必须成对出现,否则编译则出现错误。

相关文章
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
860 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
187 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
530 6
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
320 0
C++ 多线程之线程管理函数
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
1402 0
处理串口线程数据的函数
【8月更文挑战第4天】处理串口线程数据的函数。
114 4
|
Dart 编译器 API
Dart ffi 使用问题之在C++线程中无法直接调用Dart函数的问题如何解决
Dart ffi 使用问题之在C++线程中无法直接调用Dart函数的问题如何解决
|
2月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
178 6
|
5月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
317 83