10LinuxC线程学习之pthread_detach函数,错误返回值分析及其案例

2023-11-06

1 pthread_detach函数

int pthread_detach(pthread_t thread);	
/*
	功能:
	1)实现线程分离,不再受主线程管理,由系统接任。线程结束后,其退出状态不由其他线程获取,而直接自己自动释放。网络、多线程服务器常用。
	对比进程:进程若有该机制,将不会产生僵尸进程。僵尸进程的产生主要由于进程死后,大部分资源被释放,一点残留资源仍存于系统中,导致内核认为该进程仍存在。
	对比pthread_create:也可使用pthread_create函数参2(线程属性)来设置线程分离。
	
	成功:0;失败:错误号。
	参1:线程id。
*/

2 错误返回值分析

注意,所有线程的错误号返回都只能使用strerror这个函数判断,不能使用perror,因为perror是调用进程的全局错误号,不适合单独线程的错误分析,所以只能使用strerror。

3 pthread_detach案例

线程可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL错误。也就是说,如果已经对一个线程调用了pthread_detach就不能再调用pthread_join了。

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>


void *thrd_func(void *arg)
{
	printf("i am detach.\n");
    pthread_exit((void *)77);
}

int main(void)
{
    pthread_t tid;
    int ret;

    ret = pthread_create(&tid, NULL, thrd_func, NULL);
    if (ret != 0) {
        fprintf(stderr, "pthread_create error:%s\n", strerror(ret));
        exit(1);
    }
	
	ret = pthread_detach(tid);
	if (ret != 0) {
        fprintf(stderr, "pthread_detach error:%s\n", strerror(ret));
        exit(1);
    }
	
	sleep(1);

	printf("main pid=%d, tid=&lu\n", getpid(), pthread_self());

    pthread_exit((void *)0);
}


4 pthread_detach总结

  • 1)注意,所有线程的错误号返回都只能使用strerror这个函数判断,不能使用perror,因为perror是调用进程的全局错误号,不适合单独线程的错误分析,所以只能使用strerror。
  • 2)线程可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL错误。也就是说,如果已经对一个线程调用了pthread_detach就不能再调用pthread_join了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

10LinuxC线程学习之pthread_detach函数,错误返回值分析及其案例 的相关文章

随机推荐

  • linux读取触摸屏事件数据

    对于有触摸设备的电脑或者手机 通过cat proc bus input devices应该就能够看到触摸设备的相关信息 比如 cat proc bus input devices I Bus 0013 Vendor 0x0012 Produ
  • 初学者该掌握的计算机知识,初学者该如何学习电脑知识

    看到不少刚入门的电脑刚入门者找不到适合自己的学习方法 到处碰壁 那么呢 接下来大家跟着小编一起来了解一下学习电脑知识的解决方法吧 初学者学习电脑知识方法 第一阶段 鼠标和键盘的操作 鼠标的操作主要是 移动 拖动 单击 双击和右击 知道鼠标的
  • 优化最小二乘支持向量机数据回归预测:基于鸽群算法与PIO-lssvm(附Matlab代码)

    优化最小二乘支持向量机数据回归预测 基于鸽群算法与PIO lssvm 附Matlab代码 支持向量机 SVM 是一种广泛应用于分类和回归问题的机器学习方法 然而 在SVR中 传统的最小二乘支持向量机 LSSVM 需要通过手动设置超参数来进行
  • Java webservice 客户端代码(四种方式)

    方式一 用hutool工具 String authenticationUrl http 139 196 206 126 8081 services WorkflowService wsdl HashMap
  • elasticsearch报错:DeprecationWarning: Passing transport options in the API method is deprecated.

    这个警告是因为您正在使用 Elasticsearch Python 客户端的一个过时的方式来传递传输选项 transport options 根据警告信息 现在建议使用 Elasticsearch options 方法来设置传输选项 以下是
  • 关于各种merge 的心得

    合并两个线性表 包括合并两个有序线性表 两个线性表相加等 第一 遍历两个表的时候 用 代替 空的那一方取0参与计算就可以了 这样就不用后面处理长的那个表剩下来的部分了 第二 对于进位 也放到 里去 这样不用后面处理最后是否有进位了
  • chain of thought 也就是 CoT思维链

    chain of thought 也就是 CoT 一经提出就引发了社区对它的热烈讨论 CoT 能够帮助大规模语言模型解决复杂的算术 常识及字符推理等任务 背景知识 语言模型 语言模型的本质是对任意一段文本序列的概率进行建模 如果将语言模型看
  • windows下redis设置redis开机自启动方法

    windows下redis设置redis开机自启动方法 ybb ymm的博客 CSDN博客 redis开机自启动设置windows
  • vue国际化处理

    什么是Vue国际化 国际化就是你的页面要面向的群众使用的语言不只是中文 还有其他语言 在面对其他人群时要切换页面的语言 说起来很高大上 实际上还是没有那么高级的 文件的组织 一般是在大型项目中使用的 我们需要将相关文件放置在哪里 建议是新开
  • LinearAlgebraMIT_11_MatrixSpace/Rank==1‘sMatrix/SmallWorldGraph

    x 1 矩阵空间 向量空间定义 满足加法和数乘的封闭性 就类似向量空间一样 也存在着矩阵空间的定义 举个例子 例如所有的3x3的矩阵构成的矩阵空间M 它的纬度就是9 如 1 0 0 1 对于M中所有对称矩阵组成子空间N1 维度为6 M中所有
  • java.sql.SQLException: No suitable driver found for jdbc:mysql:///XXX

    用Maven的父工程搭建DAO模块 并执行测试类 测试数据库查询时 报错 定位到DAO模块的StudentDao java源文件 发现是数据库连接出错 之前我也遇到类似问题 解决方案是在db properties文件中对jdbc url配置
  • pandas(series和读取外部数据)

    一 pandas概述 1 pandas介绍 pandas 是基于NumPy 的一种工具 该工具是为了解决数据分析任务而创建的 Pandas 纳入了大量库和一些标准的数据模型 提供了高效地操作大型数据集所需的工具 pandas提供了大量能使我
  • 期货逼仓攻略之郑商所版

    为什么80 的码农都做不了架构师 gt gt gt 新手入门 逼仓是期货交易所会员或客户利用资金优势 通过控制期货交易头寸或垄断可供交割的现货商品 故意抬高或压低期货市场价格 超量持仓 交割 迫使对方违约或以不利的价格平仓以牟取暴利的行为
  • 用简单的代码实现简易的rxjs的filter功能,帮助rxjs新手了解rxjs的操作符的工作原理。

    最近学习rxjs 在边学习的过程中边总结 希望可以帮助到大家 我模仿rxjs的功能自己在编写简介的类rxjs 这样可以加深我对它的使用 也可以让新手更快速入门 先从最简单的observable对象将起 我们正常使用rxjs如下 var Rx
  • Java架构直通车——以JDBC为例谈双亲委派模型的破坏

    文章目录 引入 JDBC4 0之前 JDBC4 0之后 引入 java给数据库操作提供了一个Driver接口 public interface Driver Connection connect String url java util P
  • apache工程jakarta(雅加达)家族介绍

    Apache Ant Project Ant 众所周知 Ant 蚂蚁 是一套基于java的程序打造工具 Apache Avalon Project 阿瓦隆 Avalon Avalon 阿瓦隆 凯尔特族传说中的西方乐土岛 据说亚瑟王及其部下死
  • 【数据结构理论】图

    定义 图由顶点集V和边集E组成 线性表和树都可以是空的 但图不可为空 但图的边集可以是空集 E是有向边 无向边决定图是有向图 无向图 AB为两端点 E的集合若是无向边 则E A B 若E的集合是有向边 则E
  • datagrid控件讲解

    使用场景 软件 VisualStudio 视图引擎 Razor编辑器 后台编程语言 C 引入 table class easyui datagrid table 配置格式 function initGrid ttt datagrid 配置各
  • CobalStrike的部署(附带资源)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 CobalStrike是什么 二 CobalStrike的部署 总结 前言 作为刚入门网安的小白 挺久之前 就曾听说过CobalStrike这样的一个Re
  • 10LinuxC线程学习之pthread_detach函数,错误返回值分析及其案例

    1 pthread detach函数 int pthread detach pthread t thread 功能 1 实现线程分离 不再受主线程管理 由系统接任 线程结束后 其退出状态不由其他线程获取 而直接自己自动释放 网络 多线程服务