news 2026/9/24 1:23:21

Linux系统编程——线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux系统编程——线程

目录

一、线程的基本概念

二、进程与线程的核心区别对比

三、POSIX 线程编程:必备核心函数

1.创建线程:pthread_create()

2.获取自身 ID:pthread_self()

3.主动退出:pthread_exit()

4. 取消线程:pthread_cancel()

四、线程资源别漏收:两种回收方式

1.阻塞式回收:pthread_join()

2.分离式回收:pthread_detach()

五、小工具:查看线程信息的命令


一、线程的基本概念

  • 概论:线程是 “轻量级进程”,它不能独立存在,必须依附于某个进程(进程是线程的 “资源容器”)。
  • 作用:实现并发处理—— 比如一个程序要同时下载文件 + 显示进度,用线程分任务比开多个进程更高效。
  • 核心特征
    • 进程是 “最小资源分配单位”(系统给进程分配内存、文件描述符);线程是 “最小执行单元”(CPU 实际调度的是线程)。
    • 同一进程内的线程是 “平级关系”,仅默认存在一个 “主线程”(进程启动后自动创建的第一个线程)。

二、进程与线程的核心区别对比

对比项进程线程
资源关系资源完全独立共享进程资源(仅栈区独立)
稳定性单个进程崩溃不影响其他单个线程崩溃→整个进程挂掉
创建开销大(需分配约 3GB 空间)小(仅开辟 8MB 栈区)
并发度较低(资源重)更高(轻量可开更多)

三、POSIX 线程编程:必备核心函数

1.创建线程:pthread_create()

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
  • 作用:创建一个新线程
  • 关键参数:
    • thread:存储新线程 ID 的变量地址
    • start_routine:线程要执行的函数(线程的 “入口逻辑”)
    • arg:传给 start_routine 的参数
  • 返回值:0 = 成功,非 0 = 失败(返回错误码)

2.获取自身 ID:pthread_self()

pthread_t pthread_self(void);
  • 作用:获取当前线程的 ID
  • 用法:无需传参,直接返回线程 ID(打印格式用 %lu)

3.主动退出:pthread_exit()

void pthread_exit(void *retval);
  • 作用:线程主动结束自身执行
  • 参数 retval:线程的 “返回状态”(可被后续回收操作获取)

4. 取消线程:pthread_cancel()

int pthread_cancel(pthread_t thread);
  • 作用:请求结束指定线程
  • 参数 thread:要取消的线程 ID,返回 0 = 成功

四、线程资源别漏收:两种回收方式

1.阻塞式回收:pthread_join()

int pthread_join(pthread_t thread, void **retval);
  • 作用:等待指定线程结束,并回收其资源
  • 特点:调用该函数的线程会 “阻塞”(暂停执行),直到目标线程结束
  • 参数 retval:存储目标线程的返回状态(对应 pthread_exit 的参数)

2.分离式回收:pthread_detach()

  • 作用:给线程设置 “分离属性”
  • 特点:线程结束后,系统自动回收其资源,无需创建者干预(但创建者后续无法操作该线程)
  • 适用场景:不需要获取线程返回值的场景

五、小工具:查看线程信息的命令

  • ps -eLo pid,ppid,lwp,stat,comm:查看线程的 PID、父进程 ID、线程 ID、状态、关联命令
  • ps -elf:查看更详细的进程 / 线程信息
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 0:11:52

FreeMove终极指南:快速解决C盘空间不足的免费神器

FreeMove终极指南:快速解决C盘空间不足的免费神器 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 还在为C盘爆满而烦恼吗?FreeMove这款开源工具…

作者头像 李华
网站建设 2026/9/23 8:38:05

【C++ 实战】公交路线最少乘车次数计算(核心思路 + 精华解析)

在公交路线规划场景中,“最少乘车次数” 是典型的图论最短路径问题,其核心解法是线路级 BFS(广度优先搜索) —— 这是比传统车站级 BFS 效率高一个量级的关键思路。本文抛开冗余代码,聚焦核心逻辑与关键设计&#xff0…

作者头像 李华
网站建设 2026/9/23 1:28:26

深扒AI电影解说软件乱象:为什么90%的“一键生成”做不出爆款?

2025年了,如果你还在迷信市面上那些几十块钱的“一键生成”软件,那你大概率正在制造“工业垃圾”。很多试图通过影视解说赛道变现的MCN机构和创业者都踩过这个坑:买了一堆所谓的自动化工具,把电影文件丢进去,文案自动生…

作者头像 李华
网站建设 2026/9/23 4:59:46

DownKyi终极指南:快速掌握B站视频获取完整教程

还在为无法离线观看B站精彩内容而烦恼吗?DownKyi作为一款专业的哔哩哔哩视频获取工具,能够帮你轻松解决这一困扰。本文将为新手用户提供完整的操作指南,让你快速上手这款实用工具。 【免费下载链接】downkyi 哔哩下载姬downkyi,哔…

作者头像 李华
网站建设 2026/9/22 20:10:50

Zotero Style插件完整使用指南:文献管理可视化与智能标签系统

Zotero Style是一款专为学术研究人员设计的Zotero插件,通过可视化阅读进度和智能标签管理,显著提升文献管理效率。该插件集成了多种实用功能,让文献整理工作更加直观便捷。 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&am…

作者头像 李华
网站建设 2026/9/23 6:06:58

BetterNCM安装器完整使用指南:轻松实现网易云音乐功能升级

BetterNCM安装器完整使用指南:轻松实现网易云音乐功能升级 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而困扰吗?BetterNCM安装器正…

作者头像 李华