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

【Linux】分离线程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

一、

为什么需要“分离线程”?

🖼️ 一图看懂分离线程生命周期

💻 实战:两种分离线程的写法

方法1:创建时直接分离(推荐)

方法2:运行时动态分离


一、

为什么需要“分离线程”?

想象一个场景:你的主线程创建了100个线程处理任务,但如果不做任何处理,每个线程结束后都会变成僵尸线程(保留退出状态,占用系统资源)。就像用完的快递盒不扔,堆满房间!

传统解决方式
pthread_join手动回收(类似一个个拆快递盒),但主线程会被阻塞,无法继续干活。

更高效的方式
分离线程pthread_detach)——线程结束后系统自动回收资源,无需等待!就像快递盒自动消失,主线程专注干正事。


🖼️ 一图看懂分离线程生命周期

(此处插入配图:线程状态流转图)

  1. 创建线程pthread_create生成新线程

  2. 分离线程:调用pthread_detach或设置PTHREAD_CREATE_DETACHED属性

  3. 线程结束:系统自动释放资源(无僵尸线程)

  4. 关键点:分离后不可pthread_join!(会返回错误码EINVAL


💻 实战:两种分离线程的写法

方法1:创建时直接分离(推荐)

 

​
#include <pthread.h>
#include <stdio.h>void* task(void* arg) {printf("子线程正在工作...\n");return NULL;
}int main() {pthread_t tid;pthread_attr_t attr;// 初始化线程属性pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);// 创建分离线程pthread_create(&tid, &attr, task, NULL);pthread_attr_destroy(&attr);printf("主线程继续执行,无需等待子线程!\n");pthread_exit(NULL); // 防止主线程提前退出
}​

方法2:运行时动态分离

 

​
#include <pthread.h>
#include <stdio.h>void* task(void* arg) {// 在线程内部分离自己pthread_detach(pthread_self());printf("子线程已分离,独立运行!\n");return NULL;
}int main() {pthread_t tid;pthread_create(&tid, NULL, task, NULL);// 主线程不调用pthread_joinsleep(1); // 确保子线程有时间执行return 0;
}​

http://www.dtcms.com/a/366050.html

相关文章:

  • 如何下载免费的vmware workstation pro 17版本?
  • 小游戏公司接单难?这几点原因与破局思路值得看看
  • Pytorch笔记一之 cpu模型保存、加载与推理
  • AI隐私保护:当大模型遇上“隐身术”——差分隐私+同态加密,让模型“看不见原始数据”
  • LoRA微调分词器 应用模板(75)
  • test命令与参数
  • Python基础(⑧APScheduler任务调度框架)
  • 数据结构从青铜到王者第十九话---Map和Set(2)
  • git之分支
  • 如何创建交换空间
  • 【音视频】视频秒播优化实践
  • 无穿戴动捕如何深度结合AI数据分析,实现精准动作评估?
  • 代码随想录刷题Day48
  • Linux 字符设备驱动框架学习记录(三)
  • 数学建模-非线性规划(NLP)
  • STM32HAL 快速入门(十七):UART 硬件结构 —— 从寄存器到数据收发流程
  • DOM常见的操作有哪些?
  • Day34 UDP套接字编程 可靠文件传输与实时双向聊天系统
  • 信号调制与解调 matlab仿真
  • 异常处理机制与debug
  • 复写零(双指针)
  • 单片机day2
  • 配置时钟分频与倍频
  • 解构复杂财务逆向业务:如何优雅地生成与管理负数单?
  • Python基础(⑥属性装饰器)
  • 你只需输入一句话,MoneyPrinterTurbo直接给你输出一个视频
  • 普通人如何用 AI 提效?5 个低门槛工具 + 3 类场景案例,让 AI 成为日常助手
  • phpstorm 操作git 另外的操作在 我的收藏
  • c#编写的应用程序调用不在同一文件夹下的DLL
  • Java继承