当前位置: 首页 > news >正文

Linux C语言线程编程入门笔记

目录

  • 开发环境准备

  • 线程基础概念

    • 进程与线程的关系

    • 线程生命周期

  • 创建线程

  • 等待线程结束

  • 线程函数和参数

  • 互斥锁与共享资源保护

  • 总结

开发环境准备

  • 操作系统:以 Linux 为例(Ubuntu/CentOS 等主流发行版)。请确保系统已安装 GNU C 编译器(gcc)。

  • 线程库:POSIX 线程库一般已包含在标准库中。若未安装,可以通过包管理器安装对应开发包。

  • 编译命令:编写完成代码后,可用 gcc 编译,并加上线程选项。示例:

gcc -o myprog main.c -pthread

其中 -pthread(或 -lpthread)选项用于链接 pthread 库​blog.csdn.net。例如出现 undefined reference to pthread_create 错误时,需要添加此选项。

线程基础概念

进程与线程的关系

多个线程示意图展示了同一进程中各线程共享的资源,如代码段、数据段和打开的文件等​cnblogs.com。线程属于进程,一个进程可以包含一个或多个线程​cnblogs.com。一般来说,进程是操作系统进行资源分配和调度的最小单位,而线程是程序执行的最小单位​cnblogs.com。同一进程中的多个线程共享进程的内存空间(包括代码、数据、堆等),但各自拥有独立的寄存器和栈空间​cnblogs.com。多个线程并发执行时,可以提高程序并行度,但也需要注意同步和互斥。

线程生命周期

如上图所示,线程在运行过程中会经历不同状态。通常一个线程的生命周期包括 新建 (New)就绪 (Runnable)运行 (Running)阻塞/等待 (Blocked/Waiting)终止 (Dead) 等阶段​cnblogs.com。当调用 pthread_create() 后,线程从“新建”进入“就绪”状态;线程获得 CPU 时间后进入“运行”状态;如果线程调用 sleep()pthread_join() 等阻塞操作,则进入“阻塞”状态。线程执行完毕或调用 pthread_exit() 后进入“终止”状态​cnblogs.com。掌握这些状态转换有助于理解线程的调度行为和并发执行过程。

创建线程

要创建线程,使用 POSIX 线程库提供的 pthread_create() 函数。其原型如下:

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
  • thread:指向 pthread_t 类型变量的指针,用于保存新创建线程的 ID。

  • attr:线程属性,一般使用默认值 NULL

  • start_routine:线程入口函数地址(函数指针)。

  • arg:传递给线程函数的参数,类型为 void*

示例:创建一个线程执行简单的打印函数。

#include <stdio.h>
#include <pthread.h>void* say_hello(void* arg) {printf("Hello from thread!\n");return NULL;
}int main() {pthread_t tid;// 创建线程,执行 say_hello 函数pthread_create(&tid, NULL, say_hello, NULL);// 等待线程结束pthread_join(tid, NULL);return 0;
}

以上代码中,pthread_create(&tid, NULL, say_hello, NULL); 会创建一个新线程,该线程运行 say_hello 函数。主线程pthread_create 之后继续往下执行(此例中主线程随后调用了 pthread_join 等待子线程结束)。

等待线程结束

创建线程后,主线程和子线程是并发执行的。有时需要主线程等待子线程完成后再继续,比如输出结果或回收资源。此时使用 pthread_join() 函数。其原型为:

int pthread_join(pthread_t thread, void **retval);
  • 第一个参数为要等待的线程 ID;

  • 第二个参数用于获取线程函数的返回值(可为 NULL 表示不关心返回值)。

上例中 pthread_join(tid, NULL); 会阻塞主线程,直到 tid 对应的子线程执行结束并回收其资源为止。若省略 pthread_join,主线程可能在子线程完成前就退出,导致子线程被强制终止或无法正常输出结果。

线程函数和参数

线程入口函数必须符合 void* func(void* arg) 的形式。函数内参数类型为 void*,可以传递任意指针数据。在线程内部,需要根据实际类型将参数指针转换回来。例如:

#include <stdio.h>
#include <pthread.h>void* print_num(void* arg) {int *p = (int*)arg;      // 转换回 int* 类型printf("num = %d\n", *p);return NULL;
}int main() {pthread_t tid;int value = 42;// 将 &value 作为参数传入线程pthread_create(&tid, NULL, print_num, &value);pthread_join(tid, NULL);return 0;
}

上例中,主线程定义了一个整数 value = 42,并将它的地址传给子线程。子线程在 print_num 函数中把 void* 参数转换为 int* 后,通过 *p 访问该值并打印。注意:被传递的数据(如 value)在子线程访问期间必须有效,如果是局部变量则不能在其作用域结束后再访问。

互斥锁与共享资源保护

多个线程同时访问共享资源(如全局变量或共享数据结构)时,容易发生竞态条件。互斥锁 (mutex) 可以用来保护关键代码区域,确保同一时间只有一个线程访问共享资源。使用方法如下:

  1. 定义一个全局互斥锁变量 pthread_mutex_t lock; 并初始化:

    pthread_mutex_destroy(&lock);
    
  2. 在访问共享资源前调用 pthread_mutex_lock(&lock); 加锁,在访问结束后调用 pthread_mutex_unlock(&lock); 解锁。

  3. 程序结束时释放锁:

pthread_mutex_destroy(&lock);

示例:两个线程同时对全局变量 counter 进行递增操作,使用互斥锁保证结果正确:

#include <stdio.h>
#include <pthread.h>int counter = 0;             // 共享资源
pthread_mutex_t lock;        // 互斥锁void* add(void* arg) {for(int i = 0; i < 100000; i++) {pthread_mutex_lock(&lock);   // 加锁counter++;pthread_mutex_unlock(&lock); // 解锁}return NULL;
}int main() {pthread_t t1, t2;pthread_mutex_init(&lock, NULL); // 初始化互斥锁pthread_create(&t1, NULL, add, NULL);pthread_create(&t2, NULL, add, NULL);pthread_join(t1, NULL);pthread_join(t2, NULL);printf("counter = %d\n", counter);pthread_mutex_destroy(&lock);    // 销毁互斥锁return 0;
}

在上例中,若不使用锁,则两个线程可能会同时读写 counter 导致丢失更新。通过加锁,每次只有一个线程进入临界区 counter++,最终输出的 counter 值才是预期的 200000

总结

本文介绍了在 Linux 下使用 C 语言进行多线程编程的入门知识。从环境准备、编译选项,到线程基本概念(进程与线程的区别、线程生命周期)、以及线程的创建、等待和参数传递方法,都做了简单说明,并给出了最基本的代码示例。最后还演示了使用 互斥锁 来保护共享资源的示例。整体思路清晰、示例简洁,适合 C 语言初学者阅读。学习多线程编程时,要特别关注线程安全和并发问题,并熟练掌握 POSIX 线程库的常用函数。

相关文章:

Linux C语言线程编程入门笔记

目录 开发环境准备 线程基础概念 进程与线程的关系 线程生命周期 创建线程 等待线程结束 线程函数和参数 互斥锁与共享资源保护 总结 开发环境准备 操作系统&#xff1a;以 Linux 为例&#xff08;Ubuntu/CentOS 等主流发行版&#xff09;。请确保系统已安装 GNU C 编…...

网络安全体系架构:核心框架与关键机制解析

以下是关于网络安全体系架构设计相关内容的详细介绍&#xff1a; 一、开放系统互联安全体系结构 开放系统互联&#xff08;OSI&#xff09;安全体系结构是一种基于分层模型的安全架构&#xff0c;旨在为开放系统之间的通信提供安全保障。它定义了安全服务、安全机制以及它们在…...

SecureCRT网络穿透/代理

场景 公司的办公VPN软件只有Windows系统版本&#xff0c;没有Macos系统版本&#xff0c;而日常开发过程中需要先登录VPN后&#xff0c;然后才能登录应用服务器。 目的&#xff1a;Macos系统在使用SecureCRT时&#xff0c;登录服务器&#xff0c;需要走Parallels Desktop进行网络…...

Typora+PicGo+Gitee图床配置教程 自动图片上传

配置步骤 #mermaid-svg-aPUbWs43XR5Rh7vf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-icon{fill:#552222;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-text{fill:#552222;stroke:#552222;}#…...

基于vue框架的电子商城m8qu8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,商品类型,商品信息,商城公告 开题报告内容 基于Vue框架的电子商城开题报告 一、研究背景与意义 随着互联网技术的飞速发展&#xff0c;电子商务已成为全球商业领域的重要增长点。根据艾瑞咨询数据&#xff0c;中国网络购物用户规…...

线段树:数据结构中的超级英雄

在数据结构的世界里&#xff0c;线段树就像是一位超级英雄&#xff0c;能够高效地解决区间查询和更新问题。作为 C 算法小白&#xff0c;今天我就带大家一起认识这位超级英雄&#xff0c;揭开线段树的神秘面纱。 什么是线段树&#xff1f; 线段树是一种二叉树数据结构&#x…...

【MySQL】存储引擎 - ARCHIVE、BLACKHOLE、MERGE详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

麦科信获评CIAS2025金翎奖【半导体制造与封测领域优质供应商】

在苏州举办的2025CIAS动力能源与半导体创新发展大会上&#xff0c;深圳麦科信科技有限公司凭借在测试测量领域的技术积累&#xff0c;入选半导体制造与封测领域优质供应商榜单。本届大会以"新能源芯时代"为主题&#xff0c;汇集了来自功率半导体、第三代材料应用等领…...

开目新一代MOM:AI赋能高端制造的破局之道

导读 INTRODUCTION 在高端制造业智能化转型的深水区&#xff0c;企业正面临着个性化定制、多工艺场景、动态生产需求的敏捷响应以及传统MES柔性不足的考验……在此背景下&#xff0c;武汉开目信息技术股份有限公司&#xff08;简称“开目软件”&#xff09;正式发布新一代开目…...

wsl - install RabbiqMQ

下载erlang $ sudo apt -y install erlang 安装软件包 $ sudo apt -y install rabbitmq-server 修改配置文件 $ sudo vi /etc/rabbitmq/rabbitmq-env.conf # Defaults to rabbit. This can be useful if you want to run more than one node # per machine - RABBITMQ_NODENAME…...

力扣刷题Day 45:旋转图像(48)

1.题目描述 2.思路 只需要将左上1/4矩阵的元素挨个与右上1/4、右下1/4、左下1/4部分对应位置元素的值进行轮换即可。 3.代码&#xff08;Python3&#xff09; from math import ceilclass Solution:def rotate(self, matrix: List[List[int]]) -> None:n len(matrix)for…...

CentOS 7 系统下安装 OpenSSL 1.0.2k 依赖问题的处理

前面有提到过这个openssl的版本冲突问题&#xff0c;也是在这次恢复服务器时遇到的问题&#xff0c;我整理如下&#xff0c;供大家参考。小小一个软件的安装&#xff0c;挺坑的。 一、问题 项目运行环境需要&#xff0c;指定PHP7.0.9这个版本&#xff0c;但是‌系统版本与软件…...

【彻底卸载nginx并部署nginx1.22.1+ssl模块等】

文章目录 前言一、检查Nginx1.1 查看是否安装ssl模块 二、彻底卸载Nginx2.1 查看Nginx进程2.2 关闭Nginx服务2.3 查找Nginx安装目录2.4 彻底删除Nginx配置文件2.5 若之前Nginx设置开机自启&#xff0c;按下面方法删除2.6 使用yum方法彻底删除Nginx 三、部署Nginx1.22.1并配置ss…...

云上系统CC攻击如何进行检测与防御?

云上系统遭受CC攻击&#xff08;Challenge Collapsar&#xff0c;一种针对应用层的DDoS攻击&#xff09;时&#xff0c;检测与防御需结合流量分析、行为识别和技术手段&#xff0c;以下是核心方法&#xff1a; ​​一、检测方法​​ ​​异常流量分析​​ 监控请求量突增&#…...

python连接sqllite数据库工具类

背景 在数据集成业务中, 有很多token是有短效的到期时间的. 需要在调用多个接口的时候统一获取token ,因为我们集成平台的执行客户端是分步式的,集中保存平台大量客户的token在服务端有性能瓶颈.所以一般在客户端本地通过sqllite存储,故写了一个调用sqllite的工具类,在后续分享…...

leetcode - 双指针问题

文章目录 前言 题1 移动零&#xff1a; 思路&#xff1a; 参考代码&#xff1a; 题2 复写零&#xff1a; 思考&#xff1a; 参考代码&#xff1a; 题3 快乐数&#xff1a; 思考&#xff1a; 参考代码&#xff1a; 题4 盛最多水的容器&#xff1a; 思考&#xff1a;…...

Jsp技术入门指南【十一】SQL标签库

Jsp技术入门指南【十一】SQL标签库 前言一、SQL标签库概述1. 什么是SQL标签库&#xff0c;有什么用&#xff1f;2. SQL标签库怎么用&#xff1f; 二、常用SQL标签库详解3.1 sql:selDtataSource&#xff08;配置数据源&#xff09;3.2 sql:query&#xff08;执行查询&#xff09…...

MySQL初阶:数据库约束和表的设计

数据库约束 数据库约束是针对数据库中的表中的数据进行施加规则和条件&#xff0c;用于确保数据的准确性和可靠性。 数据库约束类型 1&#xff09;not null 非空类型 &#xff1a;指定非空类型的列不能存储null&#xff0c;如果插入的数据是null便会报错。 2&#xff09;de…...

2025年API安全防御全解析:应对DDoS与CC攻击的智能策略

2025年&#xff0c;API作为数字生态的核心枢纽&#xff0c;已成为攻击者的主要目标。DDoS攻击规模突破T级峰值&#xff0c;CC攻击则借助AI技术模拟真实用户行为&#xff0c;传统防御手段面临失效风险。如何在保障高并发业务稳定性的同时抵御复杂攻击&#xff1f;本文结合前沿技…...

【Bootstrap V4系列】学习入门教程之 组件-表单(Forms)高级用法

Bootstrap V4系列 学习入门教程之 组件-表单&#xff08;Forms&#xff09;高级用法 Layout 布局一、Form groups 表单组二、Form grid 表单网格2.1 Form row 表单行2.2 Horizontal form 水平形式表单2.3 Column sizing 列尺寸2.4 Auto-sizing 自动调整大小 三、Inline forms 内…...

Redis 主从复制集群搭建教程

目录 为什么要搭建 Redis 主从复制集群&#xff1f;搭建 Redis 主从复制集群前提条件步骤一&#xff1a;创建 Docker 网络步骤二&#xff1a;启动 Redis 主节点步骤三&#xff1a;启动 Redis 从节点步骤四&#xff1a;验证复制状态步骤五&#xff1a;使用 Python 连接 Redis 集…...

使用AES-CBC + HMAC-SHA256实现前后端请求安全验证

AES-CBC HMAC-SHA256 加密验证方案&#xff0c;下面是该方案二等 优点 与 缺点 表格&#xff0c;适用于文档、评审或技术选型说明。 ✅ 优点表格&#xff1a;AES-CBC HMAC-SHA256 加密验证方案 类别优点说明&#x1f510; 安全性使用 AES-CBC 对称加密使用 AES-128-CBC 是可…...

耳机插进电脑只有一边有声音怎么办 解决方法分享

当您沉浸在音乐或电影中时&#xff0c;如果突然发现耳机只有一边有声音&#xff0c;这无疑会破坏您的体验。本文将提供一系列检查和修复方法&#xff0c;帮助您找出并解决问题&#xff0c;让您的耳机恢复正常的立体声效果。 一、检查耳机连接是否正常 首先需要确认耳机与播放设…...

【物联网】基于树莓派的物联网开发【1】——初识树莓派

使用背景 物联网开发从0到1研究&#xff0c;以树莓派为基础 场景介绍 系统学习Linux、Python、WEB全栈、各种传感器和硬件 接下来程序猫将带领大家进军物联网世界&#xff0c;从0开始入门研究树莓派。 认识树莓派 正面图示&#xff1a; 1&#xff1a;树莓派简介 树莓派…...

AI生成虚假漏洞报告污染漏洞赏金平台

漏洞赏金计划遭遇AI伪造报告冲击 曾经因激励独立研究人员报告真实漏洞而备受赞誉的漏洞赏金计划&#xff0c;如今正面临AI生成虚假漏洞报告的重大挑战。这些伪造的漏洞报告在业内被称为"AI垃圾"&#xff0c;不仅浪费维护人员的时间&#xff0c;更令人担忧的是&#…...

一种安全不泄漏、高效、免费的自动化脚本平台

在数字化转型加速的今天&#xff0c;自动化脚本工具已成为提升效率的重要助手。然而&#xff0c;用户在选择这类工具时&#xff0c;往往面临两大核心关切&#xff1a;安全性与成本。冰狐智能辅助&#xff08;IceFox Intelligent Assistant&#xff09;作为一款新兴的自动化脚本…...

MongoDB知识框架

简介&#xff1a;MongoDB 是一个基于分布式文件存储的数据库&#xff0c;属于 NoSQL 数据库产品&#xff0c;以下是其知识框架总结&#xff1a; 一、数据模型 文档&#xff1a;MongoDB 中的数据以 BSON&#xff08;二进制形式的 JSON&#xff09;格式存储在集合中&#xff0c;…...

2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)

2025数维杯数学建模竞赛C题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、符合与定义说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2…...

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习&#xff1f; 迁移学习利用在大规模数据集&#xff08;如ImageNet&#xff09;上预训练的模型&#xff0c;改装小数据集&#xff08;如CIFAR-10&#xff09;。优势&#xff1a; 减少训练时间&#xff1a;预训练模型已学习通用特征&#xff08;如边…...

第十七章,反病毒---防病毒网管

基于杀毒软件的一种防御技术&#xff0c;是一种被动 的防御技术。 防病毒网关和主机上的杀毒软件在功能上互补和协作的关系。 病毒 --- 一般是感染或者附着在应用程序或文件中的&#xff1b;一般都是通过邮件或文件共享的方式进行传 输&#xff0c;从而对主机进行破坏 。 计…...

信赖域策略优化TRPO算法详解:python从零实现

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址)

目录 1. powershell_bypass.cna 插件&#xff08;适配 Cobalt Strike 4.0 的免费版本下载地址&#xff09; 2. 生成 EXE 文件时出现 "运行异常&#xff0c;请查看 Script Console" 的处理方法 处理步骤 3. powershell_bypass.cna 插件的功能及实际操作步骤 功能…...

从Dockerfile 构建docker镜像——保姆级教程

从Dockfile开始 dockerfile简介开始构建1、编辑dockerfile2、构建镜像3、拉取镜像4、推送到镜像仓库 镜像的优化1、优化的基本原则2、多阶段构建 dockerfile简介 开始构建 1、编辑dockerfile # 使用官方的 Python 3.8 镜像作为基础镜像 FROM python:3.8-slim# 设置工作目录 …...

Mac配置php开发环境(多PHP版本,安装Redis)

配置PHP开发环境 配置多版本PHP 因为开发需要&#xff0c;有时需要根据项目及时切换多个版本&#xff0c;除了使用Docker以外&#xff0c;常用的就是直接在mac配置PHP版本 使用 Homebrew Mac 可以通过 Homebrew 来安装或切换 PHP 版本&#xff1a; brew update brew insta…...

Quorum协议原理与应用详解

一、Quorum 协议核心原理 基本定义 Quorum 是一种基于 读写投票机制 的分布式一致性协议&#xff0c;通过权衡一致性&#xff08;C&#xff09;与可用性&#xff08;A&#xff09;实现数据冗余和最终一致性。其核心规则为&#xff1a; W&#xff08;写成功副本数&#xff09; …...

五一旅游潮涌:数字化如何驱动智慧旅游升级

文化和旅游部5月6日公布2025年“五一”假期文化和旅游市场情况&#xff0c;经文化和旅游部数据中心测算&#xff0c;假期5天&#xff0c;全国国内出游3.14亿人次&#xff0c;同比增长6.4%&#xff1b;国内游客出游总花费1802.69亿元&#xff0c;同比增长8.0%。在这组流动的数字…...

WPF 3D图形编程核心技术解析

一、三维坐标系系统 WPF采用右手坐标系系统&#xff0c;空间定位遵循&#xff1a; X 轴 → 右 Y 轴 → 上 Z 轴 → 观察方向 X轴 \rightarrow 右\quad Y轴 \rightarrow 上\quad Z轴 \rightarrow 观察方向 X轴→右Y轴→上Z轴→观察方向 三维坐标值表示为 ( x , y , z ) (x, y,…...

BLURRR剪辑软件免费版:创意剪辑,轻松上手,打造个性视频

BLURRR剪辑软件免费版是一款功能强大、简约易用且充满创意的视频剪辑软件。它集多种功能于一体&#xff0c;无论是新手还是资深用户&#xff0c;都能通过简单的操作剪辑出高质量、富有创意的视频。BLURRR不仅提供了丰富的剪辑工具&#xff0c;还划分了不同的内容模块&#xff0…...

TIME - MoE 模型代码 3.2——Time-MoE-main/time_moe/datasets/time_moe_dataset.py

源码&#xff1a;GitHub - Time-MoE/Time-MoE: [ICLR 2025 Spotlight] Official implementation of "Time-MoE: Billion-Scale Time Series Foundation Models with Mixture of Experts" 这段代码定义了一个用于时间序列数据处理的 TimeMoEDataset 类&#xff0c;支…...

解决SQL Server SQL语句性能问题(9)——正确使用索引

前述章节中,我们介绍和讲解了SQL调优所需要的基本知识和分析方法,那么,通过前述这些知识和方法定位到问题后,接下来,我们该怎么做呢?那就是本章的内容,给出解决SQL语句性能问题的、科学而合理的方案和方法。 本章主要对解决SQL语句性能问题的几种常用方法进行说明和讲解…...

【论文阅读】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 问题背景 核心挑战&#xff1a; 长视频生成通常依赖在短视频上训练的模型&#xff0c;但由于视频帧数增加会导致数…...

leetcode 383. Ransom Note

题目描述 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {vector<int> table(26,0);for(char ch : magazine){table[ch-a];}for(char ch : ransomNote){table[ch-a]--;if(table[ch-a] < 0)return false;}return true;} };...

SAF利用由Varjo和AFormX开发的VR/XR模拟器推动作战训练

通过将AFormX的先进军用飞行模拟器与Varjo的行业领先的VR/XR硬件相结合&#xff0c;斯洛文尼亚武装部队正以经济高效、沉浸式的训练方式培训战斗机飞行员&#xff0c;以提高其战术准备和作战效率。 挑战&#xff1a;获得战术军事航空训练的机会有限 军事航空训练长期以来一直…...

基于公共卫生大数据收集与智能整合AI平台构建测试:从概念到实践

随着医疗健康数据的爆发式增长,如何有效整合、分析和利用这些数据已成为公共卫生领域的重要挑战。传统方法往往难以应对数据的复杂性、多样性和海量性,而人工智能技术的迅猛发展为解决这些挑战提供了新的可能性。基于数据整合与公共卫生大数据的AI平台旨在构建一个全面的生态…...

【Pandas】pandas DataFrame clip

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.clip([lower, upper, axis, inplace])用于截…...

深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒​&#x1f338;​ 博客主页&#xff1a;羊小猪~~-CSDN博客 内容简介&#xff1a;常见目标检测算法简介​&#x1f…...

嵌套路由~

### 作业 - App.vue vue <script setup></script> <template> <router-link to"/home">首页</router-link> <router-link to"/profile">个人资料</router-link> <router-link to"/posts"&g…...

影楼精修-牙齿美型修复算法解析

本文介绍影楼修图中的牙齿美型修复功能的算法实现。 我们大部分人的牙齿看起来都可能会有一些问题&#xff0c;比如牙齿不平整&#xff0c;大门牙&#xff0c;牙齿泛黄&#xff0c;牙齿发黑&#xff0c;牙齿残缺等等&#xff0c;拍照之后影响美观度&#xff0c;正是这个爱美的…...

k8s之ingress

在前面我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort 和 LoadBalance,但是这两种方式,都有一定的缺点 NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就更加明显,L4转发,无法根据http header和path进行路由转发…...

PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!

要想LLM大模型性能更佳&#xff0c;我们需要喂给模型看得懂的高质量数据。那有没有一种方法&#xff0c;能让我们把各种文档“读懂”&#xff0c;再喂给大模型使用呢&#xff1f; 如果你用传统OCR工具直接从PDF中提取文本&#xff0c;结果往往是乱序、缺失、格式错乱。因为实际…...