线程相关笔记

2023-05-16

当主线程先于其它进程执行 pthread_exit() 时,进程还不会退出,只有最后一个线程也完成了,进程才会退出。执行exit()或者在主线程执行return,会立即终止进程的执行。

 

pthread_create()的第四个形参是线程函数的形参

 

一个可“join”的线程所占用的内存仅当有线程对其执行立pthread_join()后才会释放,因此为了避免内存泄漏,所有线程的终止时,要么已被设为DETACHED,要么使用pthread_join()来回收资源。

 

一个线程不能被多个线程等待,否则第一个接受到信号的线程成功返回,其余调用pthread_join()的线程返回错误代码ESRCH

 


void pthread_exit(void* retval);
int pthread_join(pthread_t thread, void **retval);  

pthread_join()参数 retval 的作用是为指向线程的返回值的指针提供一个位置, 这个返回值是目标线程调用 pthread_exit()或者 return 后所返回的值。当目标线程无需返回时可使用 NULL 值,调用线程如果不需对目标线程的返回状态进行检查可直接将 retval 赋值为 NULL。

 

 

 线程状态

可以分为分离线程(DETACHED)和非分离线程(JOINABLE)两种:

   分离线程是退出时会释放它的资源的线程;

   非分离线程退出后不会立即释放资源,需要另一个线程为它调用 pthread_join 函数或者进程退出时才会释放资源。

只有非分离线程才是可连接的,分离线程退出时不会报告它的退出状态。

 线程栈

每个线程都有一个独立的调用栈,线程的栈大小在线程创建的时候就已经固定下来,Linux 系统线程的默认栈大小为 8MB,只有主线程的栈大小会在运行过程中自动增长。用户可以通过属性对象来设置和获取栈大小。

线程相关函数:

int pthread_detach(pthread_t thread);

pthread_t pthread_self(void);

int pthread_equal(pthread_t t1, pthread_t t2);

int pthread_attr_init(pthread_attr_t *attr);

int pthread_attr_destroy(pthread_attr_t *attr);

int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);








 

转载于:https://www.cnblogs.com/god-of-death/p/11437135.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程相关笔记 的相关文章

  • c/c++自定义通讯协议(TCP/UDP)

    前言 xff1a TCP与UDP是大家耳熟能详的两种传输层通信协议 xff0c 本质区别在于传输控制策略不相同 xff1a 使用TCP协议 xff0c 可以保证传输层数据包能够有序地被接受方接收到 xff0c 依赖其内部一系列复杂的机制 x
  • ubuntu 使用虚拟can 与 socketCAN使用

    原文链接 xff1a https blog csdn net xiandang8023 article details 127990159 创建虚拟CAN接口 在Linux上能使用虚拟CAN接口之前 xff0c 需要在终端执行以下三个步骤
  • cmake引入第三方库

    cmake引入第三方库 第三方库包含 lib文件和 h hpp文件动态库还包含 dll文件 小例程 3rdparty bin test dll include test hpp lib Debug test lib Release test
  • AHB-APB总线协议

    AHB APB总线协议 文章目录 AHB APB总线协议一 AHB APB总线介绍二 AHB总线设备1 AHB主设备 xff08 master xff09 2 AHB从设备 xff08 slave xff09 3 AHB仲裁器 xff08
  • Modelsim缺失库快速添加

    Modelsim缺失库快速添加 文章目录 Modelsim缺失库快速添加前言一 ini文件二 器件库配置1 将器件库放在modelsim文件夹下2 ini配置文件修改 前言 在单独使用modelsim时 xff0c 假如要编译复杂的工程文件
  • AHB-APB_Lite总线协议及Verilog实现

    AHB APB Lite总线协议及Verilog实现 文章目录 AHB APB Lite总线协议及Verilog实现一 AHB Lite协议介绍二 系统框架介绍三 代码设计四 仿真测试 一 AHB Lite协议介绍 AHB xff08 Ad
  • 通信协议详解(二):IIC总线协议(传输时序+数据格式+设计实现)

    文章目录 一 IIC xff08 Inter Integrated Circuit xff09 介绍二 传输协议1 时序传输时序写操作时序数据有效性开始 amp 结束信号从机应答信号 2 数据格式 三 设计实现1 时钟2 传输过程3 三态门
  • Qt error ------ 'XXX' has not been declared

    1 头文件没加 2 调用函数者的头文件在XXX头文件的下方 转载于 https www cnblogs com god of death p 8572306 html
  • Command Expert安装

    一 安装准备 需先下载两个安装包 1 Commmand Expert安装包 https www keysight com cn zh lib software detail computer software command expert
  • Vitis开发(一):Vivado启动vitis

    Vitis是Xilinx SDK的继承开发工具 xff0c 从Vivado 2019 2版本开始启用 在Vivado 2019 1及更早版本中 xff0c 导出的硬件描述文件为 hdf文件 xff0c 给xilinx sdk使用 在Viva
  • 数字IC刷题(一)

    一 选择 1 To achieve better leakage cells are placed A HVT B LVT C RVT 解 LVT Low V threshold xff1a 低阈值 这种库的漏电流较大 xff0c 但是延迟
  • CPU设计-分支预测

    目录 CPU分支指令类型分类 1 xff09 无条件跳转 xff0f 分支 xff08 Unconditional Jump Branch xff09 指令 无条件直接跳转 xff0f 分支 xff1a 无条件间接跳转 xff0f 分支 x
  • 数字世界的积木-从MOS管搭反相器,与非门,锁存器,触发器

    文章目录 一 MOS管MOS管搭建反相器MOS管搭建传输门MOS管搭建与非门 二 与非门R S锁存器三 电平触发器电平触发RS锁存器带异步复位 xff0c 异步置位的电平触发RS锁存器电平触发D触发器 四 边沿触发器 一 MOS管 NMOS
  • 内存对齐规则

    每个特定平台上的编译器都有自己的默认 对齐系数 也叫对齐模数 程序员可以通过预编译命令 pragma pack n xff0c n 61 1 2 4 8 16来改变这一系数 xff0c 其中的n就是你要指定的 对齐系数 规则 xff1a 1
  • EGO-Planner: An ESDF-free Gradient-based Local Planner for Quadrotors(论文笔记)

    EGO Planner An ESDF free Gradient based Local Planner for Quadrotors xff08 论文笔记 xff09 ESDF欧式符号距离场避碰力估算基于梯度的轨迹优化平滑惩罚障碍惩罚可
  • 计算机组成原理系列(三):计算机存储器结构体系详解

    x1f525 Hi xff0c 我是小余 本文已收录到 GitHub Androider Planet 中 这里有 Android 进阶成长知识体系 xff0c 关注公众号 小余的自习室 xff0c 在成功的路上不迷路 xff01 前言 生
  • linux下怎么使用C语言编写接收和发送udp组播数据?

    一 xff0c 发送端 代码如下 xff1a 先调用initUdpMultiCastSender初始化 xff0c int initUdpMultiCastSender uint32 t localip uint16 t localport
  • MQTT 及其 测试工具

    协议说明书 xff1a https mcxiaoke gitbooks io mqtt cn content mqtt 04 OperationalBehavior html 官网提供了很多的broker模拟器 xff0c 地址 xff1a
  • OpenCV安装教程:Windows 安装 Visual Studio + OpenCV + OpenCV contrib

    目录 0 写作背景 1 安装visual studio 2 下载OpenCV相关的源码 下载OpenCV原始的源码 下载OpenCV contrib的源码 下载安装cmake 3 cmake编译OpenCV 初始编译 CmakeDownlo
  • 图像分类、目标检测、图像分割----简介

    1 图像分类 xff1a 单任务算法 1 1 公开数据集 xff1a xff08 1 xff09 MNIST xff1a 10个类别 xff0c 手写数字体数据集 xff0c 6万条训练数据和1万条测试数据 xff0c 28 28的灰度图

随机推荐

  • cmake基本用法

    一 cmake命令 1 基本用法 cmake 选项 lt 源码路径 gt CMake可执行程序是CMake的命令行界面 它可以用脚本对工程进行配置 工程配置设置可以在命令行中使用 D选项指定 使用 i选项 xff0c cmake将通过提示交
  • Okhttputils终极封装

    前言 项目源码 https github com yulyu2008 XiayuOkHttp Okhttputils是张鸿洋基于okhhttp封装的一个框架 使用起来很方便 相信很多人都用到过 这里我们在这个框架的基础上二次封装 让我们用起
  • c语言获取终端输入字符串的函数scanf,gets,fgets

    获取终端输入字符串scanf gets fgets 获取终端中输入字符串 xff0c 我们常用getchar scanf gets 和fgets 函数实现 这里简单汇总一下 xff1a scanf 函数可以获取到终端字符串 xff0c 但是
  • 常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum

    常用的简单校验算法 xff1a 校验和 xff0c 异或校验 xff0c crc校验 xff0c LRC校验 xff0c 补码求和 xff0c checksum 相关思路和源码来自网络 xff0c 自己只是整理 做笔记用 并未完整完善正确归
  • dpdk测试环境搭建(vmware下ubuntu环境参考上文汇总流程)

    参考上一篇文章 xff0c 这里做回顾以及整理 xff1a 使用vmware虚拟机 xff08 16 04 xff09 43 dpdk xff08 dpdk 19 08 2 tar xff09 进行测试 1 xff1a 定义两个网络适配器
  • dpdk课程学习之练习笔记一(接收,发送,arp,icmp功能测试)

    不去手动做练习实践 xff0c 就总有一种无从下手的感觉 xff0c 先按照老师的已有的源码 xff0c 把场景 xff0c 现象运行起来 工作太忙 xff0c 抽时间学习 xff0c 本文更趋向于笔记 xff0c 整理思路 xff0c 为
  • 音视频学习之ffplay基础命令整理

    查看网站 xff1a ffplay Documentation ffmpeg org 1 xff1a ffplay基础命令 xff1a ffplay version ffplay h 2 xff1a ffplay播放控制 xff1a spa
  • dpdk课程学习之练习笔记三(tcp的简单实现)

    dpdk xff08 数据平面开发套件 xff09 xff0c 提供给我们一套框架 xff0c 使我们可以在此基础上进行数据面相关软件开发 1 xff1a 基于DPDK实现tcp数据包的处理的测试 1 1 xff1a 整理基于dpdk实现t
  • linux basic ------ dd 和 cp 的区别

    问 xff1a 看了一些关于dd和cp的命令 xff0c 但是我始终无法明白dd和cp之间有什么不同 xff1f 不是都可以看成是备份的作用么 xff1f 还有什么区别呢 xff1f 答 xff1a 1 dd是对块进行操作的 xff0c c
  • 音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)

    公司项目需要实现一个只是rtsp推流和rtsp拉流的业务机制 xff0c 据说ZLMediaKit能满足rtsp推拉流的相关业务 对ZLMediaKit流媒体服务器进行安装以及了解 0 xff1a 从开源库Readme中对其功能进行了解 简
  • 音视频学习之rtsp学习rtp协议的理解(rtp)

    1 xff1a 理论理解相关细节 实际的媒体数据 xff08 视频 音频 xff09 的传输是通过rtp进行传输的 rtp可以基于udp进行发送 xff0c 也可以基于tcp进行发送 这个有点疑问 xff0c 看很多都说rtp是基于udp传
  • 日常知识点之编译运行时识别头文件目录或者链接库目录设置

    最近在日常工作中 xff0c 用自己的业务结合ZLMediakit的开源库做一些业务处理时 xff0c 涉及到一些头文件和so链接的细节技巧 xff0c 做汇总 xff0c 以方便后面回顾 使用gcc g 43 43 编译的时候 xff0c
  • tcp 服务端接收数据处理思路梳理,以及select: Invalid argument报错 笔记

    每次在实现tcp服务器端时 xff0c 总会思考 xff1a 处理接收到的客户端的消息细节时 xff0c 总会陷入一点点的误区 xff0c 加上分析公司前人各式各样的业务代码 xff0c 总是会被略微带偏 xff0c 这里做简单的tcp接收
  • vs2019测试sizeof(string)的长度是28

    在csdn回答别人的问题时 xff0c 偶然间接触到sizeof求sting的内存容量大小的问题 xff0c 经过测试 xff0c 结果有些意外 xff0c 引发自己的深度思考 xff0c 探索一番做整理 0 xff1a 相关知识点 为了分
  • RoboMaster视觉 深度相机(1):Ubuntu20.04上安装Intel D435深度相机SDK与ROS

    RoboMaster视觉 深度相机 xff08 1 xff09 xff1a Ubuntu20 04上安装Intel D435深度相机SDK与ROS 1 安装RealSense SDK 先去下载 librealsense 可以在GitHub下
  • 使用__FILE__和__LINE__定位错误

    前言 xff1a 使用 FILE 和 LINE 来定位错误已经屡见不鲜 xff0c 然而其中一些道理又有几个人仔细探究过 本文参考了Curtis Krauskopf的一篇名为Using FILE and LINE to Report Err
  • STM32F407 串口编程USART1,USART2,USART3,UART4

    串口设置的一般步骤可以总结为如下几个步骤 xff1a 1 串口时钟使能 xff0c GPIO时钟使能 2 设置引脚复用器映射 xff1a 调用GPIO PinAFConfig函数 3 GPIO初始化设置 xff1a 要设置模式为复用功能 4
  • Synergy软件的安装与使用

    Synergy软件可以使用一套鼠标键盘控制15台电脑 xff0c 需要在同一局域网或者无线网络中 xff0c 本篇文章主要讲解两台电脑的互通互联 xff08 Windows10 pro和Ubuntu 18 04 xff09 1 软件安装 x
  • 记:无人驾驶GPS循迹问题

    1 如何确定自身位置 xff1f 无人驾驶车辆安装GPS xff08 全球定位系统 xff09 和IMU xff08 惯导 xff09 可以获取自身的位姿 偏航角 经纬度以及加速度等参数 GPFPD 标准标准标准标准 GI 定位定姿消息集
  • 线程相关笔记

    当主线程先于其它进程执行 pthread exit 时 xff0c 进程还不会退出 xff0c 只有最后一个线程也完成了 xff0c 进程才会退出 执行exit 或者在主线程执行return xff0c 会立即终止进程的执行 pthread