尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Linux多线程

Linux多线程
📅 发布时间:2026/6/20 7:44:35

Linux 多线程 口语化全面讲解

Linux 里的多线程,简单说就是让一个程序同时干好几件事 —— 比如一个视频播放器,主线程负责显示画面,子线程负责加载音频、读取本地文件,不用等一个任务做完再做下一个,效率直接拉满。Linux 下开发多线程主要用POSIX 线程库(pthread 库),这是最基础也最核心的工具,新手先吃透这个就够了。

一、核心基础:线程的创建与退出(新手必学)

1. 最核心的代码模板(直接能用)

先看一个最简单的多线程例子,主线程创建 1 个子线程,各自打印内容:
c
 
运行
 
 
 
 
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>// 子线程要执行的函数(参数和返回值必须是void*,这是pthread的规定)
void* thread_func(void* arg) {int num = *(int*)arg; // 接收主线程传过来的参数for (int i = 0; i < 5; i++) {printf("子线程 %d 运行中:%d\n", num, i);sleep(1); // 暂停1秒,模拟干活}pthread_exit(NULL); // 子线程退出
}int main() {pthread_t tid; // 定义线程ID,用来标识子线程int arg = 100; // 要传给子线程的参数// 1. 创建子线程:参数依次是线程ID、线程属性(NULL用默认)、要执行的函数、传给函数的参数int ret = pthread_create(&tid, NULL, thread_func, (void*)&arg);if (ret != 0) {perror("创建线程失败"); // 出错了就打印原因return -1;}// 主线程自己的逻辑for (int i = 0; i < 3; i++) {printf("主线程运行中:%d\n", i);sleep(1);}// 2. 等待子线程结束(如果不加这个,主线程先退出,子线程可能被强制终止)pthread_join(tid, NULL);printf("所有线程执行完毕\n");return 0;
}
 

2. 编译与运行(关键步骤)

Linux 下编译多线程代码必须加 -lpthread 链接线程库,否则会报错:
bash
 
运行
 
 
 
 
# 编译命令:gcc 文件名.c -o 可执行文件名 -lpthread
gcc thread_demo.c -o thread_demo -lpthread
# 运行
./thread_demo
 

3. 核心函数解释(新手记牢)

函数 作用 关键说明
pthread_create() 创建线程 必须检查返回值,创建失败会返回非 0
pthread_join() 等待线程结束 主线程会阻塞,直到子线程执行完
pthread_exit() 线程主动退出 子线程用完记得退出,避免内存泄漏
pthread_detach() 分离线程 子线程结束后自动释放资源,不用主线程等(二选一:join 或 detach)

二、核心痛点:线程同步(避免 “抢资源”)

多线程最容易踩的坑是「资源竞争」—— 比如两个线程同时修改同一个变量,结果会乱掉。解决这个问题靠互斥锁(mutex),简单说就是 “先到先得,用完解锁”。

互斥锁实战例子(解决变量竞争)

c
 
运行
 
 
 
 
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>int count = 0; // 共享变量
pthread_mutex_t mutex; // 定义互斥锁void* add_count(void* arg) {for (int i = 0; i < 10000; i++) {pthread_mutex_lock(&mutex); // 加锁:只有一个线程能进来count++; // 操作共享变量pthread_mutex_unlock(&mutex); // 解锁:其他线程才能进}return NULL;
}int main() {pthread_t tid1, tid2;// 初始化互斥锁(默认属性用NULL)pthread_mutex_init(&mutex, NULL);// 创建两个线程,都去加countpthread_create(&tid1, NULL, add_count, NULL);pthread_create(&tid2, NULL, add_count, NULL);// 等两个线程结束pthread_join(tid1, NULL);pthread_join(tid2, NULL);printf("最终count值:%d\n", count); // 加锁后结果是20000,不加锁会随机(比如18999)pthread_mutex_destroy(&mutex); // 销毁锁,释放资源return 0;
}
 

其他同步方式(了解即可)

  • 条件变量(pthread_cond_t):让线程 “等条件满足再执行”(比如等数据准备好);
  • 信号量(sem_t):控制同时访问资源的线程数量(比如最多 3 个线程读文件)。

三、新手避坑点(关键!)

  1. 编译必须加 - lpthread:这是最常见的新手错误,不加会提示 “未定义的引用”;
  2. 共享变量要同步:只要多个线程改同一个变量,必须加锁,否则结果随机;
  3. 主线程别提前退出:如果主线程不调用 pthread_join,直接 exit,所有子线程都会被杀死;
  4. 避免线程死锁:加锁顺序要一致(比如线程 1 先锁 A 再锁 B,线程 2 也必须先 A 后 B),不然会互相等对方解锁;
  5. 资源要释放:互斥锁、条件变量用完要销毁,线程退出要清理。

四、实际应用场景

  1. 服务器开发:比如 Web 服务器,一个主线程监听端口,收到请求就创建子线程处理,同时响应多个客户端;
  2. 数据处理:比如批量解析日志,多线程同时解析不同文件,提速几倍;
  3. 实时监控:主线程显示界面,子线程定时读取 CPU、内存状态,不卡界面;
  4. 多媒体处理:视频解码、音频播放,多线程分工处理不同流。

3 类吸睛标题(适合笔记 / 分享)

硬核技术风

  1. Linux 多线程实战:从创建到同步,pthread 库手把手教
  2. 吃透 Linux 线程同步:互斥锁解决资源竞争的核心逻辑
  3. Linux 多线程避坑指南:新手必看的 5 个关键知识点

简洁吸睛风

  1. Linux 多线程:让程序同时干多件事的核心玩法
  2. 一文搞懂 pthread 库,Linux 多线程入门就会
  3. Linux 多线程:互斥锁是解决资源竞争的关键

场景痛点风

  1. 多线程改变量结果乱?Linux 互斥锁一招搞定
  2. 主线程退出子线程就死?pthread_join 帮你解决
  3. Linux 编译多线程代码报错?少了 - lpthread!

总结

  1. Linux 多线程核心用pthread 库,编译必须加 -lpthread,核心函数是创建(pthread_create)、等待(pthread_join)、退出(pthread_exit);
  2. 多线程最大坑是资源竞争,用互斥锁(mutex)加锁 / 解锁就能解决;
  3. 新手先练基础创建,再吃透互斥锁,避开 “提前退出、忘记加锁、编译漏参数” 这三个坑。

相关新闻

  • 4269-02-160000印刷电路板
  • 企业邮箱系统哪个好?2025年企业邮箱系统对比与推荐 - U-Mail邮件系统
  • 别再换手机了!1个隐藏方法让旧手机秒变Open-AutoGLM AI终端

最新新闻

  • 2026赢客网络综合实力风云榜,价格透明口碑推荐不踩雷 - mypinpai
  • 商用车电泳漆品牌哪家靠谱 2026年市场口碑解析 - 品牌排行榜
  • OpCore Simplify:10分钟搞定黑苹果配置的智能工具终极指南
  • MC68HC912BD32串行通信与Byteflight协议深度解析
  • Switch虚拟Amiibo终极指南:免费解锁游戏隐藏内容
  • 2026年初中毕业学西点推荐好的学校用户力荐 - mypinpai

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号