Linux进程与线程(2)
一、什么是线程线程被称作轻量级进程是完成任务创建、调度、消亡的执行单元。进程内部可以存在多个线程所有线程共享进程的资源每个线程拥有自己独立栈空间。二、进程与线程核心区别进程操作系统资源分配最小单元每个进程独占0‑4G虚拟地址空间包含文本段、数据段、系统数据段进程之间资源完全隔离。线程操作系统任务调度最小单元线程运行在进程的地址空间之内。独有栈空间线程内部局部变量每个线程互不干扰。共享堆区、全局变量、静态变量、字符串常量、代码文本区同一个进程的全部线程共用。重点局部变量在线程栈线程私有全局、static全部共享多线程同时修改会产生竞争问题。三、线程创建特性每个线程自带独立栈空间Linux默认大小8MB。创建出来的多个线程宏观并行运行微观串行由操作系统内核完成调度。四、线程消亡与僵尸线程线程执行结束之后必须使用 pthread_join 回收线程资源。如果不回收会产生僵尸线程残留的线程栈空间得不到释放造成内存泄漏。类比记忆进程用 wait/waitpid 回收子进程线程对应 pthread_join 回收。五、线程常用接口对照表进程API 对应线程APIfork pthread_createexit pthread_exitwait pthread_join1.pthread_create 创建线程int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);thread 输出参数存放新线程ID。attr 线程属性栈大小、优先级等传NULL使用默认属性。start_routine 线程函数指针线程启动后执行这个函数。arg 传给线程函数的参数只能是 void* 类型。返回值成功返回0失败返回错误码不设置errno不能用perror。注意传递整型数字给线程函数规范写法 (void *)(long)num 接收时 int val (int)(long)arg 适配64位系统。2.pthread_exit 退出线程void pthread_exit(void *retval);功能终止当前线程不会影响同进程其他线程。retval 线程退出状态这个值可以被 pthread_join 获取。注意不要在线程函数内部使用 exit() exit 会直接把整个进程全部结束所有线程一同销毁。3.pthread_join 阻塞回收线程int pthread_join(pthread_t thread, void **retval);功能阻塞等待指定线程执行完毕回收线程栈资源。thread 要等待回收的线程ID。retval 接收线程 pthread_exit 传出的状态不需要可以传NULL。返回值成功返回0失败返回错误码。⚠️重要坑点不能对未创建、无效的tid执行 pthread_join 程序直接崩溃。必须保证线程已经创建才允许调用join工程中一般搭配标记数组判断。调用之后主线程会原地阻塞一直等到目标线程运行结束代码才继续向下执行。六、实操代码要点总结多线程作业中需要数组标记哪些线程已经创建避免重复 pthread_create 。返回值判断下标一一对应创建几号线程就判断对应下标的返回值。数组循环注意边界数组大小N循环条件 i N 。键盘 getchar 读取按键需要过滤换行符 \n 防止回车被当成输入。编译链接必须增加 -pthread 否则报函数未定义。pthread_join 会阻塞输入q退出之后主线程会等待所有子线程全部跑完程序才结束属于正常行为。重点总结进程管资源分配线程管任务调度。栈私有全局/静态/堆共享。pthread_create 创建 pthread_exit 退出线程 pthread_join 回收三一套组合。线程传数字参数必须经过long中间转换。join只回收真实创建成功的线程不要直接回收无效tid。编译选项 -pthread 。

相关新闻

能效 1.5–1.9 倍、延迟 1.7–3.6 倍:OpenAI Jalapeño 首批跑分追平英伟达 GB300,单芯片额定 700W

能效 1.5–1.9 倍、延迟 1.7–3.6 倍:OpenAI Jalapeño 首批跑分追平英伟达 GB300,单芯片额定 700W

能效 1.5–1.9 倍、延迟 1.7–3.6 倍:OpenAI Jalapeo 首批跑分追平英伟达 GB300,单芯片额定 700W 2026 年 8 月 25 日,OpenAI 在 Hot Chips 2026 大会上首次公开自研推理芯片 Jalapeo 的基准测试结果:用 700W 单卡功耗&#xff0c…

2026/11/9 6:33:55 阅读更多 →
多协议RF与NFC:BLE MCU重塑智能设备连接与配网体验

多协议RF与NFC:BLE MCU重塑智能设备连接与配网体验

前阵子做智能家居网关的选型,被一个问题卡了很久:既要BLE连手机App,又要兼容Zigbee子设备,还得让用户碰一碰就能完成配网。如果能用一颗芯片把 BLE、802.15.4、NFC 全解决,成本和功耗都能省一大截。放到五年前这基本是…

2026/11/9 6:33:54 阅读更多 →
基于dcm4che实现DICOM虚拟打印服务器:低成本解决医疗影像打印最后一公里

基于dcm4che实现DICOM虚拟打印服务器:低成本解决医疗影像打印最后一公里

简介:DICOM(医学数字成像和通信)标准是医疗影像领域的基石协议,它定义了影像设备、工作站和归档系统之间数据交换与服务的统一规范。其核心原理在于通过标准化的服务类(Service Class)和消息元素&#xff0…

2026/11/8 11:07:45 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/8 1:19:03 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/8 14:17:55 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/9 1:59:56 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/8 1:38:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/8 1:23:14 阅读更多 →

日新闻

周新闻

月新闻