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

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:查看更详细的进程 / 线程信息
http://www.jsqmd.com/news/101309/

相关文章:

  • LobeChat能否支持神经渲染?虚拟形象动态表情生成
  • 绝区零游戏自动化终极指南:10分钟从小白到高手
  • Molecular Operating Environment (MOE) 终极完整安装指南:快速掌握药物设计利器
  • 图片转文字技术(三)提升图片转文字与AI翻译准确率的实用技巧与技术实践
  • 基于Java的奖学金评定评优系统的设计与实现
  • 今日总结2
  • 明日提醒
  • FeHelper前端工具终极指南:快速上手的完整教程
  • 汇川中型 PLC 纯 ST 语言双轴同步设备开发:初学者的友好指南
  • FeHelper:重新定义你的前端开发效率边界
  • LobeChat用户故事征集:分享你的创新应用场景
  • 12-16午夜盘思
  • MusicFree终极定制指南:3步打造你的专属音乐宇宙
  • Kafka单机搭建(二)
  • 【开题答辩全过程】以 基于Android的环卫人员管理系统设计与实现为例,包含答辩的问题和答案
  • BGE-Large-zh-v1.5终极部署指南:3步搞定文本嵌入模型实战
  • Mac微信防撤回插件WeChatIntercept:终极完整使用指南
  • 2.2新一代信息技术及应用
  • 【开题答辩全过程】以 高校电子教室在线考试系统为例,包含答辩的问题和答案
  • 无奖
  • FeHelper:颠覆传统的前端开发效率倍增器
  • C++ asio网络编程(2) buffer同步读写
  • Video DownloadHelper CoApp 深度解析:视频下载增强工具完整配置方案
  • pip - pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 200000
  • Flutter 进阶:构建高性能跨平台应用的实践与技巧
  • BetterNCM 安装器完整使用指南:从零开始掌握插件管理
  • 阴阳师百鬼夜行效率提升终极指南:5个自动化技巧快速掌握
  • Beyond Compare 5快速激活指南:一键生成方法实现免费用技巧
  • 数字时代,传统碟片的销量不减反增
  • 如何用LangChain构建智能科技政策分析引擎:3大核心能力解析