news 2026/5/4 13:39:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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. 代码案例:出生即

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

3个痛点,1个解决方案:Obsidian日历插件如何重塑你的笔记工作流

在知识管理领域&#xff0c;时间维度的缺失往往是效率最大的阻碍。你是否曾经历过这样的场景&#xff1a;需要查找上周的会议记录&#xff0c;却在成堆的笔记中迷失方向&#xff1f;试图回顾上个月的学习进度&#xff0c;却发现数据支离破碎&#xff1f;期待建立系统化的习惯追…

作者头像 李华
网站建设 2026/4/26 15:21:56

HTML链接与锚点:<a>标签的完整使用指南

HTML链接与锚点&#xff1a;<a>标签的完整使用指南 在HTML文档中&#xff0c;<a>&#xff08;Anchor&#xff09;标签是构建超文本链接的核心元素&#xff0c;它不仅实现了页面间的跳转&#xff0c;还支持文件下载、锚点定位、唤起设备应用等高级功能。本文将系统…

作者头像 李华
网站建设 2026/4/23 12:48:57

LTV-M601逻辑输出型光电耦 LITEON光宝半导体 原厂正品芯片IC解析

LTV-M601是LITEON&#xff08;光宝半导体&#xff09;生产的一款单通道、高速逻辑输出型光电耦合器&#xff0c;采用SOP-5封装。它由红外LED与硅光电晶体管组成&#xff0c;实现输入输出电路间的电气隔离&#xff0c;具有高共模瞬变抗扰度&#xff08;CMH, CML 15 kV/s Min.&a…

作者头像 李华
网站建设 2026/4/23 5:50:29

Pandoc终极教程:5分钟掌握文档转换核心技术

Pandoc终极教程&#xff1a;5分钟掌握文档转换核心技术 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 在当今数字化工作环境中&#xff0c;文档格式转换已成为日常工作的必备技能。Pandoc作为一款开源的通用…

作者头像 李华
网站建设 2026/5/2 14:15:58

baresip账户配置终极指南:5分钟快速上手

baresip账户配置终极指南&#xff1a;5分钟快速上手 【免费下载链接】baresip Baresip is a modular SIP User-Agent with audio and video support 项目地址: https://gitcode.com/gh_mirrors/ba/baresip 想要使用baresip进行语音通话却卡在账户配置这一关&#xff1f;…

作者头像 李华
网站建设 2026/5/3 4:45:28

Windows右键菜单终极优化指南:告别杂乱,提升效率

Windows右键菜单终极优化指南&#xff1a;告别杂乱&#xff0c;提升效率 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为Windows右键菜单越来越长、越来越…

作者头像 李华