news 2026/8/1 10:49:53

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/7/29 15:26:20

Slint布局革命:从布局困境到界面设计高手

Slint布局革命&#xff1a;从布局困境到界面设计高手 【免费下载链接】slint Slint 是一个声明式的图形用户界面&#xff08;GUI&#xff09;工具包&#xff0c;用于为 Rust、C 或 JavaScript 应用程序构建原生用户界面 项目地址: https://gitcode.com/GitHub_Trending/sl/sl…

作者头像 李华
网站建设 2026/7/31 19:25:47

手绘vsAI生成:活动图制作效率提升300%的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个对比报告&#xff1a;1. 传统方式绘制『图书馆借阅流程』活动图的典型步骤和时间消耗 2. 使用快马平台通过自然语言生成相同流程图的步骤和时间 3. 并排显示两种方式输出的…

作者头像 李华
网站建设 2026/7/30 12:46:32

Omega-AI:Java生态的深度学习框架终极解决方案

Omega-AI&#xff1a;Java生态的深度学习框架终极解决方案 【免费下载链接】omega-ai Omega-AI&#xff1a;基于java打造的深度学习框架&#xff0c;帮助你快速搭建神经网络&#xff0c;实现模型推理与训练&#xff0c;引擎支持自动求导&#xff0c;多线程与GPU运算&#xff0c…

作者头像 李华
网站建设 2026/7/30 4:52:24

16、XDP、Linux 内核安全、能力与 Seccomp 技术解析

XDP、Linux 内核安全、能力与 Seccomp 技术解析 1. XDP 的负载均衡与防火墙应用 在网络架构中,传统的负载均衡器部署在所有服务器前端并将流量转发给它们,这并非最佳选择。不过,这并不意味着 XDP 不适合此场景。若将负载均衡从外部服务器迁移到运行应用程序的同一机器上,…

作者头像 李华
网站建设 2026/7/30 1:10:28

php反馈程序收到用户反馈留言后,向企业微信群发一个消息

php反馈程序收到用户反馈留言后&#xff0c;向企业微信群发一个消息&#xff1a; 主要分为两个核心步骤&#xff1a; 获取企业微信群机器人的 Webhook 地址。 在您的 PHP 程序中向该地址发送特定的 POST 请求。 步骤一&#xff1a;在企业微信群中创建并配置机器人 进入群聊…

作者头像 李华