news 2026/4/29 4:39:23

Linux -- 线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
  • 进程 = 资源容器

  • 线程 = 执行单元

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 4:27:44

别再写Service地狱了!用DDD重构我的项目(4)

事件&#xff0c;触发异步消息在领域驱动设计&#xff08; DDD&#xff09;中&#xff0c;领域事件&#xff08;Domain Events&#xff09;是一种模型&#xff0c;用于表示领域中发生的有意义的事件。这些事件对业务来说是重要的&#xff0c;并且通常表示领域状态的变化。适配器…

作者头像 李华
网站建设 2026/4/29 4:26:43

from-python-to-numpy实战:从随机游走看向量化威力

from-python-to-numpy实战&#xff1a;从随机游走看向量化威力 【免费下载链接】from-python-to-numpy An open-access book on numpy vectorization techniques, Nicolas P. Rougier, 2017 项目地址: https://gitcode.com/gh_mirrors/fr/from-python-to-numpy 在数据科…

作者头像 李华
网站建设 2026/4/29 4:22:33

Zeego性能优化秘籍:提升React Native应用菜单体验的7个技巧

Zeego性能优化秘籍&#xff1a;提升React Native应用菜单体验的7个技巧 【免费下载链接】zeego Menus for React (Native) done right. 项目地址: https://gitcode.com/gh_mirrors/ze/zeego Zeego作为React Native应用的专业菜单解决方案&#xff0c;其性能表现直接影响…

作者头像 李华
网站建设 2026/4/29 4:19:55

vue-beauty自定义组件开发教程:扩展你的组件库

vue-beauty自定义组件开发教程&#xff1a;扩展你的组件库 【免费下载链接】vue-beauty Beautiful UI components build with vue and ant design 项目地址: https://gitcode.com/gh_mirrors/vu/vue-beauty vue-beauty是一个基于Vue和Ant Design构建的UI组件库&#xff…

作者头像 李华
网站建设 2026/4/29 4:19:13

MutComputeX安装和使用教程

MutComputeX 是一个强大的基于 3D 深度学习的蛋白质工程工具&#xff0c;能够预测蛋白质-配体界面的突变。然而&#xff0c;官方文档主要针对 AMD 显卡&#xff08;ROCm平台&#xff09;进行了配置&#xff0c;对于使用普通 NVIDIA 显卡或仅使用 CPU 的用户来说&#xff0c;直接…

作者头像 李华