pthread_create函数
函数原型
pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于在程序中创建一个新线程。
#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
参数解释
pthread_t *thread: 这是一个指向pthread_t类型的指针,用于存储新创建线程的线程标识符。调用者必须分配这个指针,pthread_create会将其设置为新线程的标识符。const pthread_attr_t *attr: 这是一个指向pthread_attr_t结构的指针,用于指定线程的属性。如果设置为NULL,则使用默认属性。常见的属性包括线程的调度策略、优先级、堆栈大小等。void *(*start_routine) (void *): 这是一个指向线程函数的指针。这个函数是新线程启动后要执行的函数。它的返回类型是void*,并接受一个void*类型的参数。void *arg: 这是传递给线程函数的参数。该参数的类型是void*,因此可以传递任何类型的数据,只需在线程函数中进行适当的类型转换。
返回值
- 成功时,
pthread_create返回0。 - 失败时,返回一个非零的错误码。
代码示例
#include <QCoreApplication>
#include <QThread>
#include <QDebug>
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <thread> //包含C++标准线程头文件
#include <sstream> //包含字符串流头文件void inputCurPthreadId()
{//通过C++标准库获取当前线程号std::thread::id threadID = std::this_thread::get_id();//将 std::thread::id 转换为一种 QDebug 能够处理的类型std::ostringstream oss;oss << threadID;std::string threadIDStr = oss.str();qDebug() << "[C++] This Thread Id = " << QString::fromStdString(threadIDStr);//Qt QThread类获取当前线程qDebug() << "[Qt] This Thread = " << QThread::currentThread() << "\n";
}// 线程函数
void* threadFunction(void* arg)
{qDebug() << "In pthread_create:";inputCurPthreadId();int threadNumber = *((int*)arg);std::cout << "Hello from thread " << threadNumber << "!\n";sleep(2); // 模拟一些工作std::cout << "Thread " << threadNumber << " is exiting.\n";pthread_exit(NULL); // 退出线程
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() << "before pthread_create:";inputCurPthreadId();pthread_t thread;int threadNumber = 1;// 创建线程if (pthread_create(&thread, NULL, threadFunction, (void*)&threadNumber) != 0) {std::cerr << "Error creating thread\n";return 1;}// 等待线程完成if (pthread_join(thread, NULL) != 0) {std::cerr << "Error joining thread\n";return 2;}qDebug() << "after pthread_create:";inputCurPthreadId();std::cout << "Main thread is exiting.\n";return a.exec();
}

注意事项
- 线程同步:多个线程可能会访问共享资源,因此需要使用同步机制(如互斥锁、条件变量等)来避免竞争条件。
- 线程属性:如果需要设置特定的线程属性(如堆栈大小、调度策略等),可以使用
pthread_attr_set*函数族来配置pthread_attr_t结构。 - 线程退出:线程可以通过调用
pthread_exit函数来退出,或者在线程函数中返回。主线程在所有其他线程完成之前不应该退出,否则会导致程序异常终止。 - 线程清理:使用
pthread_join函数等待线程完成并回收其资源。如果不需要等待线程完成,可以使用pthread_detach函数将线程分离。
相关文章:
pthread_create函数
函数原型 pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…...
C# 并发和并行的区别--16
目录 并发和并行 一.并发 定义 特点 代码示例 代码解释 二.并行 定义 特点 在C#中的体现 代码示例 代码解释 三.并发和并行的区别 四 .如何在C#中选择并发还是并行 1.考虑任务类型 2.代码示例 3.注意事项 五.总结 并发和并行 在编程领域,并发和并行是两个密切…...
Java日志配置
1.导入依赖 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupI…...
python中的RPA->playwright自动化录制脚本实战案例笔记
playwright录制功能使用绕过登录操作 1、首先安装playwright pip install playwright2、 安装支持的浏览器 playwright install # 安装支持的浏览器:cr, chromium, ff, firefox, wk 和 webkit3、接着在自己的项目下运行录制命令: playwright codegen…...
Linux查看日志命令
问题排查过程: 1. 评估问题现象是否是操作问题,还是服务bug,页面出异常信息是后端,没抛异常信息有可能是前端渲染问题,F12抓包看那个字段没有数据(有时候需要前端帮忙确定是哪一个字段)&#x…...
(8)ERC20详细介绍
ERC20 是以太坊上的一种代币标准(同质化代币),由 Fabian Vogelsteller 在 2015 年提出。它定义了一组通用的接口和规则,使得开发者可以创建可互操作的代币。ERC20 代币在以太坊生态系统中非常流行,广泛应用于各种去中心…...
opencv projectPoints函数 computeCorrespondEpilines函数 undistortPoints函数
opencv projectPoints函数 cv::projectPoints 是 OpenCV 中用于将三维点投影到二维图像平面的函数。它通常用于计算在相机坐标系下的三维点在图像坐标系中的位置,考虑了相机的内参和外参。 函数原型 void cv::projectPoints(InputArray objectPoints,InputArray …...
springboot集成websocket实现实时大量数据,效率性能高
前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注一下! 也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习&…...
游戏引擎学习第80天
Blackboard:增强碰撞循环,循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改,以便实现一些新的功能。具体来说,是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏,目标是构建一些更丰富…...
Windows 上的 MySQL 8.4.3 和 WSL(Ubuntu)的 MySQL 8.0.40 之间配置 主从同步
在 Windows 上的 MySQL 8.4.3 和 WSL(Ubuntu)的 MySQL 8.0.40 之间配置 主从同步(Master-Slave Replication) 的过程略有不同,因为两者的 MySQL 版本和环境存在差异。以下是详细步骤,帮助你完成跨平台的主从…...
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
: 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中,博主将带大家去学习所谓的…...
Sentinel配置流控规则详解
前言 在微服务架构中,流量控制(Flow Control)是保障服务稳定性的重要手段之一。Sentinel作为一款开源的流量控制、熔断降级Java库,以其丰富的应用场景和完善的监控能力,在微服务保护中扮演了重要角色。本文将详细介绍…...
解锁动态规划的奥秘:从零到精通的创新思维解析(6)
解锁动态规划的奥秘:从零到精通的创新思维解析(6) 前言: 在动态规划的众多问题中,多状态DP问题是一个非常重要的类别。它的难点在于如何设计合适的状态表示和转移方程,从而高效地解决问题。 多状态DP的核…...
Qwen2.5 3B、7B、14B在文本按照规范进行标准化改写任务上的表现
任务介绍:军事杂志方向资料标准化改写任务 1. 任务目标 本任务的目标是对军事杂志领域的非标准化资料进行改写,确保其符合军事文献的写作规范和标准格式。通过改写,保留原文的核心内容和信息,同时提升语言的准确性、简洁性和专业…...
Oracle报错ORA-01078、LRM-00109
虚拟机异常关机后,rac数据库备机无法启动数据库,报错如下 解决方法: 找到如下路径文件 执行: cp init.ora.016202516818 /u01/app/oracle/product/19.3.0/db/dbs/ mv init.ora.016202516818 initplm2.ora 再次进入命令行sqlpl…...
免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)
哈喽大家好,欢迎来到虚拟化时代君(XNHCYL),收不到通知请将我点击星标!“ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…...
Titans 架构中的记忆整合:Memory as a Context;Gated Memory;Memory as a Layer
Titans 架构中的记忆整合 Titans 架构中的记忆整合 Memory as a Context(MAC)变体:在处理长序列数据时,将序列分段,对于当前段 S ( t ) S^{(t)}...
无缝过渡:将 Ansys 子结构模型转换为 Nastran
了解如何将 Ansys 子结构模型无缝转换为 Nastran,以满足有效载荷动态模型要求 Ansys 子结构模型的优势 Ansys 子结构模型为从事大型装配体结构分析和仿真的工程师和分析师提供了多项优势。 这些模型通过将复杂结构划分为更小、更易于管理的子结构,可以…...
小哆啦的跳跃挑战:能否突破迷宫的极限?
小哆啦开始力扣每日一题的第六天 https://leetcode.cn/problems/jump-game/description/ 小哆啦的跳跃挑战:能否突破迷宫的极限? 第一阶段:小哆啦的初次尝试 —— 盲目跳跃 小哆啦刚进入跳跃之城,他决定采用一种非常直接的方法来…...
KubeSphere部署安装,接入KubeKey安装的k8s集群
KubeSphere安装接入KubeKey安装的k8s集群 文章目录 KubeSphere安装接入KubeKey安装的k8s集群 一.NFS安装配置1.服务器安装NFS服务2.下载并部署 NFS Subdir External Provisioner1).下载部署文件2).创建 NameSpace3).创建 RBAC 资源4).配置 deployment.yaml5).部署 Storage Clas…...
[OS] Rate Monotonic Scheduling: Optimizing Real-Time Task Prioritization
1. 速率单调调度:实时系统的优先级管理艺术 想象一下急诊室的医生如何决定救治顺序——心跳停止的患者永远优先于感冒发烧的病人。速率单调调度(Rate Monotonic Scheduling,RMS)就是实时操作系统中的这位"分诊专家"&am…...
电子工程师如何提升专业英语能力
电子工程师的专业英语能力培养指南 1. 技术英语的重要性 1.1 行业历史背景 半导体IC产业起源于硅谷,从仙童半导体到Intel的发展历程奠定了现代电子技术的基础。编程语言从最早的机器语言发展到现代高级语言,操作系统从CP/M演进到今天的Windows、Linux和…...
如何快速掌握AI变声神器RVC:面向初学者的完整指南
如何快速掌握AI变声神器RVC:面向初学者的完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Con…...
别再只盯着运放了:用跨阻放大器搞定光电传感器信号调理的完整指南
光电传感器信号调理实战:跨阻放大器设计与避坑指南 当你在昏暗的灯光下测试光电传感器时,是否曾被微弱的电流信号折磨得焦头烂额?作为嵌入式工程师,我曾在凌晨三点的实验室里,面对闪烁不定的示波器波形,才…...
LoRA训练助手效果展示:动漫风格迁移作品集
LoRA训练助手效果展示:动漫风格迁移作品集 1. 引言 你是否曾经想过,把自己拍摄的普通照片转换成新海诚风格的唯美画面,或者让日常场景拥有吉卜力工作室的梦幻质感?现在,这一切都不再是梦想。通过LoRA训练助手&#x…...
树莓派+SocketCAN实战:手把手教你用CanFestival控制伺服电机(附完整配置文件)
树莓派SocketCAN实战:手把手教你用CanFestival控制伺服电机(附完整配置文件) 在工业自动化和机器人控制领域,CANopen协议因其高可靠性和实时性成为伺服电机控制的首选方案。本文将带你用树莓派这一低成本硬件平台,结合…...
手把手教你配置:用微型纵向加密搞定IEC-104协议的风光数据安全上传
新能源场站IEC-104协议安全传输实战:微型纵向加密配置全指南 在新能源场站的自动化系统中,IEC-104协议作为电力行业标准通信规约,承担着风机、光伏逆变器与升压站之间关键运行数据传输的重任。然而,传统光纤环网中的明文传输方式存…...
5步掌握Loop:让Mac窗口管理效率提升10倍的免费开源方案
5步掌握Loop:让Mac窗口管理效率提升10倍的免费开源方案 【免费下载链接】Loop MacOS窗口管理 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 在数字工作环境中,窗口管理已成为影响效率的隐形瓶颈。Mac用户每天平均需要执行200次窗口操作…...
【第四周】论文精读:Frustratingly Simple Retrieval Improves Challenging, Reasoning-Intensive Benchmarks
极简检索即可大幅刷新高难度推理基准主流观点认为简单RAG无法提升MMLU、MATH、GPQA等高难度推理任务,甚至会损害性能;本文推翻这一共识,证明核心瓶颈并非检索范式,而是缺少高质量、广覆盖、可单机部署的检索库;提出COM…...
掌握Calibre电子书管理:从格式转换到高级编辑的完整指南
掌握Calibre电子书管理:从格式转换到高级编辑的完整指南 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre Calibre是一款功能强大的开源电子书管理器…...
