news 2026/6/26 8:57:33

飞凌嵌入式ElfBoard-线程之线程分离

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞凌嵌入式ElfBoard-线程之线程分离

线程在POSIX标准中可以分为分离线程(DETACHED)和非分离线程(JOINABLE)两种,它们的主要区别在于资源管理和退出状态的获取方式;

非分离线程(JOINABLE):线程在结束时不会自动释放其资源,包括线程栈和线程控制块(TCB),因为操作系统需要保存这些信息,以便其他线程能够获取其退出状态。需要调用 pthread_join() 函数来回收线程资源,这一操作会阻塞调用者直到被连接的线程结束。适用于希望在线程退出时获取其退出状态或执行一些清理工作的情况。

分离线程(DETACHED):分离线程在创建时设为分离状态,或在运行时通过 pthread_detach() 将其设置为分离状态。线程退出后会自动释放所有相关资源,操作系统直接清理,不需要通过 pthread_join() 进行回收。由于分离线程退出时不保留退出状态,其他线程无法通过 pthread_join() 获取其退出状态。适用于不需要获取线程退出状态的场合,通常用于后台任务或不关心执行结果的线程。

相对于非分离线程,分离线程不需要其他线程来回收资源,因为线程退出时系统会自动释放它的资源。更加独立,线程结束时自动释放资源,减少了线程管理的复杂度。不需要 pthread_join(),适合那些无需返回值、也不需要其他线程等待的任务。可以减少内存泄漏的风险,适合处理大量线程创建和终止的场景。pthread_detach()函数可以将非分离线程设置为分离线程。

1.头文件

#include <pthread.h>

2.函数原型

int pthread_detach(pthread_t thread);

3.参数

pthread_t thread:线程的标识符,即要设置为分离状态的线程。

4.返回值

成功,返回 0。失败,返回错误码,可能的错误码包括:ESRCH:表示找不到指定的线程。EINVAL:指定的线程已经是分离状态,不能再次设置。

5.注意事项

1)必须在线程运行时调用:pthread_detach() 应在线程开始执行后调用,或者创建完线程后立刻调用。

2)避免重复设置:对同一个线程多次调用 pthread_detach() 会导致错误。

3)不可获取退出状态:一旦线程变为分离状态,就不能使用 pthread_join() 获取它的退出状态。

6.示例:通过pthread_detach()函数把线程非分离状态设置为分离状态

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

void* thread_function(void* arg) {

printf("Thread is running\n");

pthread_exit(NULL);

}

int main() {

pthread_t thread;

// 创建非分离线程

if (pthread_create(&thread, NULL, thread_function, NULL) != 0) {

perror("Failed to create thread");

return 1;

}

// 将线程设置为分离状态

if (pthread_detach(thread) != 0) {

perror("Failed to detach thread");

return 1;

}

// 主线程继续执行

printf("Main thread is running\n");

// 不需要调用 pthread_join,因为线程已经是分离的

pthread_exit(NULL); // 保证主线程不会提前退出

return 0;

}

7.运行结果

Main thread is running

Thread is running

8.代码解析

使用 pthread_create() 创建一个非分离线程。如果线程创建成功,pthread_create() 会返回 0,否则会返回非零值,并输出错误信息。调用 pthread_detach() 将创建的线程设置为分离状态,使得该线程在完成任务后自动释放资源,避免了手动调用 pthread_join() 的需求。pthread_exit(NULL); 用于阻止主线程在其他线程执行完毕之前提前结束。pthread_exit() 只会终止主线程本身,而不会影响分离线程的执行。

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

基于ZigBee与MC9S12C32的直流电机无线PWM调速系统全解析

1. 项目概述与核心价值在嵌入式系统与物联网的交叉领域&#xff0c;无线控制一直是个既基础又充满挑战的课题。很多朋友可能都尝试过用蓝牙或Wi-Fi模块做点对点控制&#xff0c;但面对需要自组网、低功耗、多节点的工业或家居场景时&#xff0c;往往会感到力不从心。ZigBee技术…

作者头像 李华
网站建设 2026/6/26 8:56:32

如何在浏览器中优雅预览Markdown文件:5个实用场景解决方案

如何在浏览器中优雅预览Markdown文件&#xff1a;5个实用场景解决方案 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否经常需要在浏览器中查看Markdown文件&#xff0c;却只…

作者头像 李华
网站建设 2026/6/26 8:53:02

国内四向车公司有哪些?盘点2026年头部企业实力

在智能仓储赛道&#xff0c;四向穿梭车已经成为高密度存储的标配。但面对众多公司&#xff0c;企业往往难以抉择&#xff1a;国内四向车公司到底有哪些&#xff1f;各自的竞争壁垒是什么&#xff1f;本文将为您梳理2026年国内四向穿梭车领域的代表性企业。江苏智库智能科技有限…

作者头像 李华
网站建设 2026/6/26 8:51:04

文件包含漏洞实战:从原理到Pikachu靶场攻防演练

1. 项目概述&#xff1a;文件包含漏洞的攻防实战在Web安全测试的日常工作中&#xff0c;文件包含漏洞&#xff08;File Inclusion Vulnerability&#xff09;是一个既经典又极具杀伤力的安全缺陷。它不像SQL注入那样广为人知&#xff0c;但其危害性丝毫不弱&#xff0c;因为它直…

作者头像 李华
网站建设 2026/6/26 8:48:08

【计算机毕业设计】基于SpringBoot的校园捐赠系统

1.系统介绍随着校园公益事业的发展&#xff0c;传统线下捐赠模式存在信息流通不畅、活动管理效率低、用户参与度不足等问题&#xff0c;难以满足师生便捷参与公益捐赠的需求。为此&#xff0c;本研究设计并实现一套基于SpringBoot的校园捐赠系统&#xff0c;旨在通过数字化手段…

作者头像 李华
网站建设 2026/6/26 8:45:36

Python密码安全实战:从bcrypt到Argon2的现代加密方案

1. 项目概述&#xff1a;为什么密码加密是每个开发者的必修课几年前&#xff0c;我接手过一个老项目的维护工作&#xff0c;登录模块的数据库里&#xff0c;用户密码竟然是以明文形式存储的。你能想象那种后背发凉的感觉吗&#xff1f;一旦数据库泄露&#xff0c;所有用户的账号…

作者头像 李华