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

Linux 多线程进阶:不再只传 NULL —— 详解 pthread_attr_t 线程属性

各类资料学习下载合集
链接:https://pan.quark.cn/s/7c8c391011eb

在之前的 Linux 多线程编程中,我们在调用pthread_create创建线程时,第二个参数通常都直接传NULL

pthread_create(&tid,NULL,thread_func,NULL);

NULL意味着使用默认属性。默认属性(非绑定、非分离、缺省堆栈大小、与父进程同优先级)能满足 90% 的开发需求。但在某些高性能或特殊场景下(例如需要极低的内存占用、或者不需要回收线程资源),我们就需要“定制”线程了。

本文将深入探讨如何使用pthread_attr_t修改线程属性,并重点演示如何创建一个“出生即分离”的线程。


一、 线程属性操作流程

定制线程属性的步骤非常标准化,严格遵循“初始化 -> 设置 -> 使用 -> 销毁”的流程:

  1. 定义属性变量pthread_attr_t attr;
  2. 初始化pthread_attr_init(&attr);
    • 成功返回 0,失败返回错误号。
  3. 设置具体属性:调用各种pthread_attr_setxxx函数。
    • 例如:pthread_attr_setdetachstate(分离状态)、pthread_attr_setstacksize(栈大小)等。
  4. 创建线程pthread_create(&tid, &attr, ...)
    • 将配置好的attr传给创建函数。
  5. 销毁属性pthread_attr_destroy(&attr);
    • 注意:创建完线程后,属性对象就没有用了,必须销毁以防止资源泄漏(虽然主要释放的是属性对象内部可能申请的内存,不影响已创建的线程)。

二、 核心实战:创建分离态线程

1. 为什么要通过属性设置分离?

我们在之前的学习中知道,可以通过pthread_detach(tid)函数将线程设置为分离态。那么为什么还需要通过属性来设置呢?

  • 效率与安全:如果线程执行非常快,可能在主线程调用pthread_detach之前,子线程就已经结束了。虽然这通常不会导致逻辑错误,但通过属性设置可以让线程在创建的那一刻就是分离的,从根本上省去了后续调用的麻烦,也避免了潜在的状态竞态。

2. 相关函数

#include<pthread.h>// 设置分离状态intpthread_attr_setdetachstate(pthread_attr_t*attr,intdetachstate);// 获取分离状态intpthread_attr_getdetachstate(constpthread_attr_t*attr,int*detachstate);
  • detachstate可选值
    • PTHREAD_CREATE_DETACHED:分离状态(无法 join)。
    • PTHREAD_CREATE_JOINABLE:非分离状态(默认,需要 join)。

3. 代码案例:出生即

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

相关文章:

  • VideoReTalking技术深度解析:重塑视频人物语音同步体验
  • MFCMAPI完整使用指南:深入解析MAPI消息处理技术
  • Auto-Subtitle终极指南:5分钟掌握视频字幕自动生成
  • baresip账户配置终极指南:5分钟快速上手
  • Llama-Factory能否用于军事AI研发?相关伦理与限制说明
  • 实时环境预警系统构建指南:基于分布式Agent的数据融合架构设计
  • 如何在Obsidian中实现专业图表绘制:drawio插件完整指南
  • 知乎专业回答模拟器:Llama-Factory训练高质量知识输出
  • Pandoc终极教程:5分钟掌握文档转换核心技术
  • Screenbox媒体播放器:Windows平台终极多媒体解决方案
  • 3个痛点,1个解决方案:Obsidian日历插件如何重塑你的笔记工作流
  • 终极GASShooter游戏开发完整指南:快速构建高性能射击游戏
  • PESD2IVN24-TR 瞬态电压抑制TVS二极管NXP安世半导体 原厂正品芯片IC解析
  • 工业元宇宙数据瓶颈突破:3种高效多模态特征提取方法详解
  • 使用Python SDK操作Azure OpenAI服务的完整指南:从基础调用到企业级应用
  • FFXIV快速启动器完整使用指南:从安装到高级配置
  • Windows Defender彻底移除终极指南:从技术原理到实战应用
  • CppSharp完全指南:5步实现C++到.NET的自动化绑定
  • LTV-M601逻辑输出型光电耦 LITEON光宝半导体 原厂正品芯片IC解析
  • 人工智能与应用
  • 解密 plum:三分钟打造你的专属 Rime 输入法生态
  • 深入解析.NET 中的 XDocument:解锁 XML 处理的高级特性
  • 分布式存储监控告警终极指南:从原理到实战的完整解决方案
  • 企业AI智能体的落地挑战与最优实践:技术选型、架构设计及效能优化
  • php反馈程序收到用户反馈留言后,向企业微信群发一个消息
  • Wan2.2-Animate-14B:基于混合专家架构的AI动画生成技术突破
  • 微信支付PHP SDK深度应用:解锁高效支付集成的秘密武器
  • 如何快速配置BERT模型:新手必看的完整教程
  • 群晖NAS定制化引导镜像:终极兼容性解决方案完整指南
  • PyULog:无人机飞行日志数据解析与处理全解析