news 2026/4/22 22:55:11

学习笔记——线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习笔记——线程

线程学习笔记整理

一、线程概论

基本概念

  • Linux中线程是轻量级的进程,线程属于某个进程

  • 作用:实现并发,处理相对耗时任务

线程特征

  1. 进程是系统中最小的资源分配单位

  2. 线程是系统中最小的执行单位

  3. 线程关系:进程中,线程与线程是平级关系

  4. 主线程:进程中默认有一个主线程

二、线程与进程的区别

对比项进程线程
资源共享资源对立,独立地址空间资源共享,共享进程地址空间
栈区独立有各自独立的栈区(默认8MB)
稳定性相对稳定不稳定(一个线程崩溃会导致整个进程崩溃)
创建开销大(需要创建3GB空间)小(只需在进程空间中开辟新栈区)
并发度较低较高
通信方式复杂(管道、消息队列等)简单(共享内存)

三、线程编程步骤(POSIX)

  1. 创建多线程→ 2.线程空间操作→ 3.线程资源回收

四、查看线程信息命令

# 查看线程信息 ps -eLo pid,ppid,lwp,stat,comm ps -eLf # 参数说明: # pid: 进程ID # ppid: 父进程ID # lwp: 轻量级进程ID(线程ID) # stat: 状态 # comm: 命令名

五、线程相关函数

1. 创建线程

#include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

功能:创建指定线程

参数

  • thread:线程ID(输出参数)

  • attr:线程属性(通常NULL,使用默认属性)

  • start_routine:线程回调函数(线程执行入口)

  • arg:传递给回调函数的参数

返回值

  • 成功:0

  • 失败:错误码

示例

void *thread_func(void *arg) { // 线程执行代码 return NULL; } pthread_t tid; pthread_create(&tid, NULL, thread_func, NULL);

2. 获取线程ID

pthread_t pthread_self(void);

功能:获取当前线程ID

返回值:当前线程ID(unsigned long int,使用%lu格式打印)

示例

printf("Thread ID: %lu\n", pthread_self());

3. 线程退出

方式一:线程自行退出
void pthread_exit(void *retval);

功能:子线程自行退出

参数retval- 线程退出时的返回值("临死遗言")

示例

void *thread_func(void *arg) { // ... 执行代码 pthread_exit((void *)"Thread finished"); }
方式二:请求结束线程
int pthread_cancel(pthread_t thread);

功能:请求结束一个线程

参数thread- 要结束的线程ID

返回值

  • 成功:0

  • 失败:非0值

4. 线程资源回收(阻塞方式)

int pthread_join(pthread_t thread, void **retval);

功能

  • 回收指定线程资源

  • 具有阻塞等待功能(如果线程未结束,会阻塞)

参数

  • thread:要回收的子线程ID

  • retval:接收子线程返回值(pthread_exit的值)

返回值

  • 成功:0

  • 失败:非0值

示例

void *retval; pthread_join(tid, &retval); printf("Thread returned: %s\n", (char *)retval);

5. 线程分离属性

int pthread_detach(pthread_t thread);

功能:设置线程分离属性

参数:线程ID(通常填自己的ID)

返回值

  • 成功:0

  • 失败:非0值

特点

  • 分离的线程退出后,系统自动回收资源(栈区)

  • 分离后,创建者不能再使用pthread_join回收

六、注意事项

  1. 线程安全

    • 多个线程访问共享资源需要同步(互斥锁、信号量等)

    • 避免竞争条件

  2. 内存管理

    • 线程共享进程的堆空间

    • 每个线程有独立的栈空间

    • 传递动态分配的内存要注意释放

  3. 编译选项

    gcc -pthread program.c -o program
  4. 错误处理

    • 所有pthread函数返回0表示成功

    • 非0值为错误码,使用strerror(errno)查看错误信息

八、线程状态

线程可以处于以下状态:

  1. 就绪:等待CPU调度

  2. 运行:正在执行

  3. 阻塞:等待某个事件(如I/O、锁)

  4. 终止:执行完成

九、线程使用场景

  1. I/O密集型任务:一个线程阻塞时,其他线程可继续执行

  2. 并行计算:将大任务分解为多个子任务

  3. 服务器编程:每个连接一个线程

  4. GUI应用:主线程处理界面,工作线程处理耗时操作

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

文档生成PPT工具大集合,PDF与Word都能直接用

告别文档转PPT难题&#xff01;轻竹办公一键搞定 每到季度末&#xff0c;职场人总会陷入让人头大的汇报难题里。对着堆成山的 PDF、Word 文档&#xff0c;想把它们转换成 PPT&#xff0c;却发现内容框架混乱&#xff0c;不知道怎么提炼重点&#xff1b;好不容易搭好框架&#…

作者头像 李华
网站建设 2026/4/16 13:32:18

AI自动生成PPT工具对比分析,效率差距明显

职场年终总结痛点大揭秘 又到年终总结季&#xff0c;职场人仿佛进入了一场没有硝烟的战斗。熬夜赶报告是常有的事&#xff0c;框架搭建像在迷雾中摸索&#xff0c;脑中思绪万千&#xff0c;却不知从何下笔&#xff1b;设计排版更是让人头疼&#xff0c;满脑子商务风格&#xf…

作者头像 李华
网站建设 2026/4/20 3:15:08

PDF转Word格式容易乱?分享几种实用解决方法

折腾半天终于把PDF转成了Word&#xff0c;满心期待点开却发现全是乱码&#xff0c;是不是瞬间心态崩了&#xff1f;放心&#xff0c;很多人都踩过这个坑。想了解乱码产生的原因和应对方法吗&#xff1f;继续往下看~一、乱码的常见表现形式乱码类型表现形式可能原因排查方向方框…

作者头像 李华
网站建设 2026/4/18 3:32:27

5分钟解锁OpenPLC Editor:新手也能快速上手的工业自动化编程神器

5分钟解锁OpenPLC Editor&#xff1a;新手也能快速上手的工业自动化编程神器 【免费下载链接】OpenPLC_Editor 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPLC_Editor 想要轻松踏入工业自动化编程领域吗&#xff1f;OpenPLC Editor作为一款功能强大的开源PLC编…

作者头像 李华
网站建设 2026/4/21 7:02:14

Switch大气层主题终极指南:完美定制你的个性化界面

还在为Switch单调乏味的原生界面感到厌倦吗&#xff1f;想要给你的游戏主机注入全新的活力吗&#xff1f;本文将为你揭秘如何通过wiliwili项目打造专属的Switch大气层主题&#xff0c;让你的主机界面焕然一新&#xff01; 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨…

作者头像 李华
网站建设 2026/4/20 10:26:38

筑牢招聘防线:员工诚信背调的核心价值与实践要点

在人才竞争日趋激烈的当下&#xff0c;企业招聘早已不只是筛选技能与经验&#xff0c;更要守住诚信这道关键防线。一个履历光鲜却存在诚信瑕疵的员工&#xff0c;不仅可能给团队协作埋下隐患&#xff0c;更会直接影响企业的运营效率与品牌口碑。 员工诚信背调&#xff0c;本质是…

作者头像 李华