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

Linux -- 线程

线程

线程基本概念

线程:操作系统调度的最小单位,是进程内的一条执行路径。

  • 一个进程可包含多个线程

  • 同一进程内线程共享资源:地址空间、全局变量、堆、文件描述符

  • 每个线程独有:栈、程序计数器、寄存器、上下文

线程核心特点

  1. 轻量级:创建 / 销毁 / 切换开销远小于进程

  2. 资源共享:线程间直接访问共享数据,通信极快

  3. 独立调度:可在多核 CPU 上真正并行

  4. 稳定性弱:一个线程崩溃 → 整个进程崩溃

进程 vs 线程(⭐)

对比项进程线程
资源独立地址空间、独立资源共享进程地址空间与资源
开销创建 / 切换 / 销毁开销大轻量,开销小
通信管道 / 共享内存 / 消息队列等直接读写共享变量
稳定性进程间独立,互不影响一个线程崩溃 → 进程崩溃
调度单位以进程为单位以线程为单位

线程核心 API

头文件:

#include <pthread.h>

编译必须加:-lpthread

gcc 1.c -o 1 -lpthread
1. 创建线程
int pthread_create( pthread_t *thread, // 输出:线程ID const pthread_attr_t *attr, // 线程属性,填NULL void *(*start_routine)(void*), // 线程入口函数 void *arg // 传给线程的参数 );
  • 返回值:成功 = 0,失败 = 非 0

2. 等待线程结束(阻塞)
int pthread_join( pthread_t thread, // 要等待的线程ID void **retval // 接收线程返回值 );
  • 作用:主线程阻塞,等待子线程结束再继续

3. 线程退出
void pthread_exit(void *retval);
  • retval:线程返回值(必须是全局 / 堆内存,不能是局部变量)

线程生命周期(⭐)
  • 主线程如果不调用 pthread_join就先退出,会导致整个进程终止,子线程被强制杀死。

  • 正确流程:

    主线程创建子线程 → pthread_join 等待 → 主线程再退出

经典示例:线程计算 1~10 累加

#include <stdio.h> #include <stdlib.h> #include <pthread.h> ​ int num = 0; // 全局变量,线程间共享 ​ void* fun(void* arg) { for (int i = 0; i <= 10; i++) { num += i; } pthread_exit(&num); // 返回全局变量地址 } ​ int main() { pthread_t id; pthread_create(&id, NULL, fun, NULL); ​ printf("main running...\n"); ​ int* s = NULL; pthread_join(id, (void**)&s); // 等待线程结束并接收返回值 ​ printf("result = %d\n", *s); // 输出 55 return 0; }
  • 进程 = 资源容器

  • 线程 = 执行单元

  • 线程更轻、更快、共享资源,但稳定性更弱,需同步控制。

http://www.jsqmd.com/news/717402/

相关文章:

  • vue3+springboot基于算能平台的个性化商品 商城推荐系统
  • 视频压缩技巧:如何最大限度减小文件大小,同时保持优质画质?
  • 2026数控龙门加工中心定制厂家名录:龙门导轨磨床厂家推荐+龙门平面磨床厂家推荐汇总 - 栗子测评
  • Radxa ROCK 5B+单板计算机硬件升级与应用解析
  • 10个zsh4humans实用技巧:大幅提升命令行工作效率
  • 音乐解锁大师:3步让网易云音乐NCM格式文件重获新生
  • 遥感数据处理入门:别再傻傻分不清辐射校正、定标和大气校正了
  • 如何使用gpt-repository-loader:将代码仓库转换为AI友好格式的完整指南
  • 气液增力缸铆接设备厂家哪家好?2026年靠谱伺服铆接设备源头厂家/紧固件铆接设备厂家汇总与推荐:德伊捷领衔 - 栗子测评
  • 以太网实时性不好,载波监听机制可不背锅~
  • 零代码数据查询革命:DB-GPT让你的数据库说人话![特殊字符]
  • 终极指南:Pycord Cogs架构设计——模块化机器人开发的最佳实践
  • uTLS Roller自动轮换:实现持续有效的指纹抵抗
  • 数据驱动精准农业:高标准农田地力与微环境多维异构数据集建设深度解析(WORD)
  • 如何为Simplenote iOS贡献代码:完整的开发者指南
  • 锦囊专家:2026十大央国企AI场景标杆案例集
  • CSS如何改变单个网格项目的对齐方式
  • 如何使用gpt-repository-loader:将代码仓库转换为LLM友好格式的终极指南
  • tabulate与其他C++表格库对比分析:为什么选择tabulate
  • Linux -- 互斥锁
  • Universal-G-Code-Sender与UGS Platform对比:选择适合你的CNC控制方案
  • 灌浆料生产厂家哪家好?2026浙江灌浆料/石膏基自流平/水泥基自流平厂家实力分析与品牌优选推荐 - 栗子测评
  • GUITION JC4880P433开发板:物联网与边缘AI的硬件利器
  • Lighthouse性能优化终极指南:从性能杀手到体验加速器的实战秘籍
  • 厨房自动灭火装置哪家好?2026厨房灭火设备厂家推荐/厨房自动灭火设备厂家推荐:顺康鑫领衔,优质厨房灭火设备生产厂家盘点 - 栗子测评
  • Get-cookies.txt-LOCALLY:浏览器Cookie本地化管理的革命性解决方案
  • powertoys下载 微软powertoys中文版安装
  • 2026年最新EDTA四钠厂家/EDTA二钠厂家盘点与推荐:南风领衔,口碑好|供货稳的品牌盘点 - 栗子测评
  • 对标OpenClaw,版国产“小龙虾” WorkBuddy正式上线了!
  • FastSpeech2完整指南:从零开始构建高效的文本转语音系统