Linux7-线程
一、前情回顾
| chdir(); |
| 功能: 函数用于改变当前进程的工作目录。 |
| 参数:路径(Path):这是一个字符串参数,表示要切换到的目标目录的路径。 |
| 返回值: 成功:在成功改变当前工作目录时, 失败:如果因为某些原因(如路径不存在、权限不足等)无法改变目录, |
二、线程
轻量级进程 线程是cpu任务调度的最小单位
1.线程的创建
线程由某个进程创建,从属于某个进程。
1.1内容:
由所在进程为其分配独立的的栈区空间(默认8M),其他空间(堆区、数据区、文本区)共享给所有线程,内核存储线程控制块。

1.2特点:
线程是cpu任务调度的最小单位
进程是操作系统资源分配的最小单位
1.3线程与进程的区别:
1.线程是cpu任务调度的最小单位
进程是操作系统资源分配的最小单位
2.线程是一个轻量级的进程,所在进程为其分配独立的栈区空间
3.资源消耗:进程>线程
4.效率角度:线程的创建速度>进程 线程任务切换>进程
5.安全角度:多进程>多线程 各个进程相互独立,线程资源共享
6.通信角度:多线程>多进程 线程间数据共享更方便,进程是独立的需要使用进程间通信的通信方法。
2.线程的调度
宏观并行,微观串行
操作系统调度
3.线程的消亡
3.1线程的消亡
3.2回收线程
return , pthread_exit()
4.编程:
#include <pthread.h>
编译链接 -pthread
| int pthread_create(pthread t *thread, const pthread_attr_t *attr,void *(*start routine)(void*),void *arg); |
| 功能:创建一个线程在被调的进程中 |
| 参数: pthread t *thread:保存线程ID的变量的地址 const pthread_attr_t *attr:设置线程属性对象的地址 NULL:按照线程默认属性去创建 void *(*start routine)(void*):回调函数:线程启动后需要执行的任务的入口地址 void *arg:作为回调函数的参数被传参。 |
| 返回值: 成功:=0 失败:!0 |
| pthread_t pthread_self(void); |
| 功能:获得线程的tid号 |
| 返回值: 总是成功:tid |
| int pthread_join(pthread_t thread,void **retval); |
| 功能:阻塞等待回收线程资源(回收非分离属性的线程) |
| 参数: thread:需要回收的线程tid retval: 线程退出时,传递给回收线程的参数 |
| 返回值: 成功:0 失败:!0 |
| void pthread_exit(void*retval); |
| 功能:退出一个线程 |
| 参数:指向返回值的指针 |
对于创建线程的进程,无合适机会回收线程资源时,可以将线程设置成具有分离属性的线程。
线程属性:
线程的分离属性:线程结束时,不需要其他线程回收,会被操作系统自动回收。//孤儿进程
线程的非分离属性:可以被其他线程回收或者结束。pthread_join或者结束 //僵尸进程
设置线程的分离属性:
1.定义线程属性对象 pthread_attr attr
2.初始化线程属性对象 int pthread_attr_init(pthread_attr_t *attr)
3.设置线程的分离属性 int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
PTHREAD_CREATE_DETACHED
4.以分离属性创建线程 int pthread_create(..., const pthread_attr_t *attr,...);
5.销毁线程属性对象 int pthread_attr_destroy(pthread_attr_t *attr)
5.线程之间的通信
通过pthread_create给线程任务传参
int num=10;
pthread_create(,,,&num);void *fun(void *arg)
{int fnum =*(int *)arg;
}
全局变量的方式线程间通信
三、补充
1. 函数指针
一个指向函数的指针
2. 函数指针定义:
函数 : void fun(int a, int b);
函数返回值类型 (*指针名称)(函数的形参表);
定义了一个叫做"指针名称"函数指针。
指针:void (*pfun)(int , int);
3. 给函数指针赋值:
初始化:
void (*pfun)(int , int) = fun;//int *p = &a;
赋值:
void (*pfun)(int , int); // int *p;
pfun = fun; // p = &a;
4. 函数指针数组
把多个函数的地址组织存储在一个数组中
定义一个指针数组:
char * arg[5] = {NULL};
函数指针数组:
void (*arg[5])(int, int);
对数组进行初始化:
void (*arg[])(int, int) = {fun, fun1, fun2} ;
通过typedef重命名函数指针类型:
typedef int U32;
函数指针类型:void (*)(int , int); // int *;
typedef void (*Pfun_t)(int , int);
将函数指针类型重命名成Pfun_t类型
Pfun_t arr[5];
函数指针数组:
把多个函数的地址组织存储在一个数组中
定义一个指针数组:
char * arg[5];定义一个函数指针数组; 对函数指针数组初始化:
void (*argv[])(int ,int); void (*argv[5])(int ,int)={fun,fun1,fun2……};
通过typedef重命名函数指针类型:
typedef int U32;
函数指针类型:void (*)(int ,int);
typedef voidun_t)(int ,int)//将函数指针类型重命名成Pfun_t类型
相关文章:
Linux7-线程
一、前情回顾 chdir();功能: 函数用于改变当前进程的工作目录。 参数:路径(Path):这是一个字符串参数,表示要切换到的目标目录的路径。 返回值: 成功:在成功改变当前工作目…...
在线VS离线TTS(语音合成芯片)有哪些优势-AIOT智能语音产品方案
离线 TTS 存在语音质量欠佳、音色选择有限、语言支持单一更新困难、占用资源多、适应性差、难以个性化定制等痛点 01更新维护困难 由于是离线模式,难以及时获取最新的语音数据和算法更新,无法得到持续改进。 02占用本地资源 需要在设备本地存储较大的…...
结构型模式 - 代理模式 (Proxy Pattern)
结构型模式 - 代理模式 (Proxy Pattern) 代理模式是一种结构型设计模式,它允许通过代理对象来控制对另一个对象(目标对象)的访问。代理对象充当目标对象的接口,客户端通过代理对象间接访问目标对象。 分为两大类 静态代理&#…...
el-select滚动获取下拉数据;el-select滚动加载
el-select下拉获取数据 1.解决问题2.封装MyScrollSelect组件3.使用MyScrollSelect组件 1.解决问题 场景:下拉数据量过大,后端提供一个分页查询接口;需要每次滚动加载下一页的下拉数据 且单选的状态,需要支持回显,通过n…...
HTTP GET 请求示例
鸿蒙操作系统(HarmonyOS)是华为公司自主研发的面向全场景的分布式操作系统,旨在为用户提供一个安全、流畅且跨设备无缝连接的体验。它支持多种终端设备,如智能手机、平板电脑、智能电视、汽车等,并实现了模块化解耦&am…...
简单理解Oracle中的latch
可以用一个小卖部抢购的例子来理解 Oracle 数据库中的 Latch: 1、 什么是 Latch? 打个比方,假设数据库的某个内存区域(比如缓存的数据块)是小卖部货架上的最后一包辣条,Latch 就像是货架前的一个狭窄通道&a…...
ubuntu新系统使用指南
1. 更新源 2. 配置rime 输入法 sudo apt install ibus-rimeibus-setup #打开配置界面添加雾凇拼音 cd ~/Documents/Tool/input_source/plumgit clone --depth 1 https://github.com/rime/plum plum #没有梯子就劝退cd plum/bash rime-install iDvel/rime-ice:others/recipe…...
sage-huga改进SITAN
Sage-Husa自适应滤波算法 Sage-Husa自适应滤波算法是一种在递推滤波过程中实时估计和修正系统噪声和观测噪声统计特性的算法,从而降低系统模型误差,提高滤波精度。该算法基于卡尔曼滤波,并通过自适应调整噪声协方差矩阵来优化滤波效果。 算法原理 Sage-Husa滤波器的核心思…...
DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!
项目地址:GitHub - deepseek-ai/FlashMLA 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天! 一、开源周震撼启幕 继上周预告后,DeepSeek于北京时间今晨9点准时开源「FlashMLA」,打响开源周五连…...
Git add --- error: Filename too long
0 Preface/Foreword 1 解决办法 git config --system core.longpaths true...
Python入门12:面向对象的三大特征与高级特性详解
面向对象编程(OOP)是Python编程中非常重要的一部分,它通过封装、继承和多态这三大特征,帮助我们更好地组织和管理代码。除此之外,Python还提供了一些其他特性,如类属性、类方法和静态方法,进一步…...
动态链接器(九):.init和.init_array
ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分,用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码,通常由运行时环境(如C标准库的启动例程࿰…...
Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入
作者:来自 Elastic Dai Sugimori 了解稀疏向量嵌入,理解它们的作用/含义,以及如何使用它们实现语义搜索。 Elasticsearch 提供语义搜索功能,允许用户使用自然语言进行查询并检索相关信息。为此,目标文档和查询必须首先…...
安宝特方案 | 电力行业的“智能之眼”,AR重新定义高效运维!
引言: 电力行业正经历智能化变革,安宝特AR数字化工作流以四大核心优势,为电力企业打造全场景智慧运维方案! 四大颠覆性功能,直击行业痛点 1、高度自定义作业流程 支持图文指引、语音播报、AI实时识别(如…...
【落羽的落羽 数据结构篇】树、二叉树
文章目录 一、树1. 树的概念和结构2. 树的相关术语 二、二叉树1. 概念与结构2. 满二叉树3. 完全二叉树4. 二叉树的性质5. 二叉树的存储结构 一、树 1. 树的概念和结构 之前我们学习了线性表,今天我们再来接触一种全新的数据结构——树。 树是一种非线性的数据结构…...
[回顾]从原型链视角解读Vue底层实现Vue VueCompoent VM VC关系
从原型链视角解读VueComponent与Vue关系 原型链 根据,原型链涉及三个关键属性:__proto__是所有对象的私有属性,指向原型链的第一个元素;prototype是函数的属性,实例对象不拥有它;constructor指向构造函数。提到原型链是JS中实现继承的机制,通过属性链式查找属性,直到…...
springcloud nacos 整合seata解决分布式事务
文章目录 nacos安装Mysql5.7安装及表初始化seata server安装下载并解压seata安装包在conf文件夹修改file.conf文件向本地数据库导入seata需要的表修改registry.conf文件将seata配置信息添加到nacos配置中心启动seata server springcloud整合seata测试流程正常下单流程扣减库存失…...
【算法系列】快速排序详解
文章目录 快速排序的多种实现方式1. 基本快速排序(Lomuto 分区方案)1.1 基本原理1.2 步骤1.3 Java 实现示例 2. Hoare 分区方案2.1 基本原理2.2 步骤2.3 Java 实现示例 3. 三数取中法3.1 基本原理3.2 步骤3.3 Java 实现示例 4. 尾递归优化4.1 基本原理4.…...
神经网络发展简史:从感知机到通用智能的进化之路
引言 神经网络作为人工智能的核心技术,其发展历程堪称一场人类对生物大脑的致敬与超越。本文将用"模型进化"的视角,梳理神经网络发展的五大关键阶段,结合具象化比喻和经典案例,为读者呈现一幅清晰的AI算法发展图谱。 一…...
C语言番外篇(4)--------->goto语句
在C语言中,有一个很特殊的语法,这就是goto语句。goto用于实现同一函数的跳转,goto后面会有一个标志,执行goto语句时,就会跳转到标志的位置。 一、goto语句的语法 (1)goto在前,标志…...
经典算法:打家劫舍(动态规划 + 回溯求最优解)C++ 超详细解析
前言打家劫舍是动态规划的入门经典题,核心考察无相邻元素选取的最大和问题。本文将基于 C 实现两种核心解法:动态规划(空间优化版):高效计算最大金额,时间 O (n),空间 O (1)回溯法:不…...
Sunshine开源游戏串流服务器:免费搭建跨平台低延迟游戏共享系统
Sunshine开源游戏串流服务器:免费搭建跨平台低延迟游戏共享系统 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源免费的自托管游戏串流服务器&#x…...
新浪舆情通:数据大屏让信息一目了然
新浪舆情通:数据大屏让信息一目了然网络时代,面对海量数据,如何快速发现重要信息、准确判断发展态势、及时开展分析研判?新浪舆情通数据大屏,通过多维数据的可视化大屏,将复杂的数据转化为直观的分析图表&a…...
ZLUDA终极实践指南:在非NVIDIA GPU上无缝运行CUDA程序的完整方案
ZLUDA终极实践指南:在非NVIDIA GPU上无缝运行CUDA程序的完整方案 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA ZLUDA是一个革命性的开源项目,它让开发者和研究者能够在非NVIDIA GPU上…...
嵌入式处理器的接口资源架构
2.1.2 嵌入式处理器的接口资源架构 嵌入式处理器的接口资源并非独立存在,而是通过分层架构组织在一起。理解这一架构,有助于开发者在进行接口开发时准确把握资源配置和交互方式,从而高效地进行驱动开发和问题排查。 一、架构分层模型 现代嵌入式处理器(特别是以RK3588为…...
Qwen3.5-4B-Claude-Opus-GGUF开发者案例:Python异常堆栈解读与调试路径推荐
Qwen3.5-4B-Claude-Opus-GGUF开发者案例:Python异常堆栈解读与调试路径推荐 1. 模型能力概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专注于代码分析与逻辑推理的轻量级AI模型。作为Qwen3.5-4B的推理蒸馏版本,它特别强化了以下能力…...
Linux CFS 的 throttled_cfs_rq:被限流任务组的管理与恢复
一、简介在现代云计算和容器化环境中,CPU资源的公平分配与限制是系统稳定性的关键保障。Linux内核的CFS(Completely Fair Scheduler)带宽控制机制通过cpu.cfs_quota_us和cpu.cfs_period_us(cgroup v2中统一为cpu.max)为…...
labview解析can报文,DBC解析Can报文,支持asc、csv、txt格式文件离线解析...
labview解析can报文,DBC解析Can报文,支持asc、csv、txt格式文件离线解析,可通过设置移位,逗号数,空格数等特征索引ID和报文数据,解析报文,可将解析结果存储为本地txt文本,可设置循环…...
MuJoCo两轮平衡小车复现:从GitHub克隆到成功运行的保姆级排错指南(附Linux依赖解决方案)
MuJoCo两轮平衡小车复现:从GitHub克隆到成功运行的保姆级排错指南(附Linux依赖解决方案) 在机器人仿真领域,MuJoCo凭借其高效的物理引擎和逼真的动力学模拟,成为众多研究者和开发者的首选工具。复现GitHub上的开源项目…...
Qwen-Image-2512-SDNQ部署教程:模型路径LOCAL_PATH配置避坑指南
Qwen-Image-2512-SDNQ部署教程:模型路径LOCAL_PATH配置避坑指南 你是不是也遇到过这样的情况:下载好了Qwen-Image-2512-SDNQ-uint4-svd-r32模型,兴冲冲地执行python app.py,结果报错“Model not found”或者直接卡在加载阶段&…...
