当前位置: 首页 > news >正文

Linux多线程--cleanup push/pop

Linux / POSIX 线程(pthread)里几个关键机制:cleanup push/pop、线程取消(pthread_cancel)、线程退出(pthread_exit)之间的关系。

一、pthread_cleanup_push / pop 是什么?

它们是线程“清理栈”(cleanup handler stack)机制

1. 作用

当线程:

  • 被取消(pthread_cancel)
  • 或者调用 pthread_exit
  • 或者正常执行 pop 释放

都会自动执行“清理函数”,比如:

  • 释放锁
  • 释放内存
  • 关闭文件

2. 基本形式

pthread_cleanup_push(void (*routine)(void *), void *arg); pthread_cleanup_pop(int execute);

3. 典型用法

void cleanup(void *arg) { printf("cleanup: %s\n", (char*)arg); } void* thread_func(void* arg) { pthread_cleanup_push(cleanup, "resource A"); printf("thread running\n"); pthread_cleanup_pop(1); // 1 = 立即执行 cleanup return NULL; }

4.一个综合例子(最能说明问题)

#include <pthread.h> #include <stdio.h> #include <unistd.h> pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; void cleanup(void* arg) { pthread_mutex_unlock((pthread_mutex_t*)arg); printf("cleanup: unlock mutex\n"); } void* thread_func(void* arg) { pthread_mutex_lock(&lock); pthread_cleanup_push(cleanup, &lock); printf("thread running\n"); sleep(10); // 这里是取消点 pthread_cleanup_pop(1); return NULL; } int main() { pthread_t tid; pthread_create(&tid, NULL, thread_func, NULL); sleep(1); pthread_cancel(tid); pthread_join(tid, NULL); return 0; }

http://www.gsyq.cn/news/1618563.html

相关文章:

  • Claude Code内置隐藏木马近3个月,官方回滚难消中国用户信任危机
  • 当AI写出百万行代码:金融科技的下一站是“可控智能”
  • 学生会议记录软件帮你记录更快更准整理更省心
  • idea卡顿 idea设置了Maximum Heap Size 但current value还是小值
  • 有哪些适合硕士、从开题至定稿的一体化 AI 写作工具推荐?
  • TLS Connect 如何解决了关于证书有效期缩短的问题?
  • Yaskawa XU-ACP130-B11晶圆预对准器
  • Java计算机毕设之基于 Java 的在线学术文献收纳检索系统的设计与实现 基于 Java 的电子书目文献资源管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 【实战分享】.NET 10 + ABP WebAPI 项目发布部署至 Docker Desktop 避坑与实践记录
  • Java毕业设计-基于 SpringBoot 的宠物医院医疗设备与疫苗管理系统的设计与实现 基于 SpringBoot 的宠物医院综合管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 半导体硅片制造|纯技术专家线晋升 CTO 完整路径 薪资 关键领域
  • 数据中台建设中“平台优先“vs“治理优先“的技术路线之争
  • 如何完全掌握Cursor Pro破解工具:终极免费使用AI编程助手指南
  • 下载 | Windows Server 2022官方原版ISO映像!(6月更新、标准版、数据中心版、20348.5256)
  • AI工程实践:从问题定义到baseline模型的落地链路
  • 2026中考英语词汇用什么 App 复习?重点看课标词汇、错词巩固和复习反馈
  • vllm与sgLang
  • 机器人即服务(RaaS)时代来了:机器人租赁平台的技术架构与落地实践
  • 90%的iPhone用户都踩过的坑:弹窗、发烫、掉电池,根源全在这
  • unordered_map 与 unordered_set 使用技巧(C++哈希容器高性能实战全解)
  • 2026年门店小程序平台怎么选?预约、核销和会员储值能力对比
  • 景观设计师转型AI:2个月掌握大模型的实战路径
  • STM32与AD74413R构建高精度数据采集系统
  • 把AI流式响应当成编译问题:用状态机消灭200空白
  • 从成本中心到价值引擎:License许可优化的进阶之路
  • 【硬核详解】基于 CH340G 的 STM32 一键下载电路设计:从数据手册到参数计算全流程指南(一)
  • 2026年腾讯云秒杀活动抢购攻略
  • 西城微科SIC8833高精度胎压计芯片方案
  • AS717芯片规格 8K@60Hz外围少 AS717电路图参考
  • 鸿蒙原生 ArkTS 布局容器切换:Column ↔ Row 的响应式转换深度实践