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

C++builder中的人工智能(25):AI中的C++多线程std::thread

主要是为Ai算法中要使用到C++的多线程,这是使用C++11中的多线程std::thread。

在现代数学、物理和计算机科学中,优化和加速应用程序开发在编程中非常重要,以加快计算速度。多核心CPU和GPU通过核心和晶体管的数量得到了高度发展,为当今的服务器和计算机提供了更多的计算能力。因此,我们可以通过使用 std::thread 在我们的应用程序中使用更多的核心和线程。我们可以使用 std::thread 类进行多线程操作,本文将解释如何使用 std::thread 以及如何用现代C++示例使用它。

人工智能、图像-视频处理、计算力学、流体动力学等需要在多线程中使用所有核心。std::thread 类是在C++11中引入的,定义在 <thread> 头文件中的一个特殊类,它属于并发支持库

让我们通过一些非常简单的例子来看看它是如何工作的。

现代C++中的 std::thread 是什么?

在现代C++中,一个并发支持库被设计来解决多线程操作中的问题。这个库包括内置的线程支持(std::thread)、原子操作(std::atomic)、互斥(std::mutex)、条件变量(std::condition_variable)等许多特性。

std::thread 类是在 <thread> 头文件中定义的一个特殊类,它允许多个函数并发执行,并代表一个单一的执行线程。

我们可以使用线程的 join() 方法等待线程完成执行。在这里,当我们调用 join 方法时,thread 对象变为 non-joinable,并且可以安全地被销毁,当线程执行完成后返回。

让我们看看我们如何在不同的函数定义中使用 std::thread

现代C++中使用 std::thread 运行函数的示例?

这里有一个非常简单的例子,它在一个单独的线程 myt 中运行 myf() 函数。

#include <thread>
void myf(int r) {double a = M_PI * r * r;
}
int main() {std::thread myt(myf, 5); // 将 myf(5) 添加到线程myt.join(); // 连接线程以等待线程执行
}

现代C++中使用 std::thread 运行类方法的示例?

这是一个 std::thread 示例,它在一个类对象 o1 中运行 myf() 函数。

#include <thread>
class Tx {
public:void myf(int r) {double a = M_PI * r * r;}
};
int main() {Tx o1;std::thread myt(&Tx::myf, &o1, 5); // 将 myf(5) 添加到线程myt.join(); // 连接线程以等待线程执行
}

这里还有另一个好例子,展示如何使用线程向量使用更多线程。

在C++中,向量(vector)是现代C++中非常灵活的数组形式。我们可以将 std::vectorstd::thread 类一起用于多线程操作。本文提供了一个非常好的例子,展示了如何结合使用 std::threadstd::vector

首先,让我们回顾一下C++中的向量和线程。

目录

  • 什么是C++中的 std::vector
  • 什么是C++中的 std::thread
  • 如何在C++多线程中使用 std::thread 与 std::vector
  • 有没有一个完整的示例,展示如何在C++中结合使用 std::thread 与 std::vector

什么是C++中的 std::vector

向量(Vectors) 是包含在现代C++的 <vector> 库中的动态数组。当向量中插入或删除成员时,它们可以自动调整大小。向量与动态数组类似,这些动态数组由容器自动管理。向量是现代C++的方式;它们的成员被放置在连续的内存存储中;因此,它们可以被调整大小,并且可以使用迭代器进行访问和遍历。可以使用以下语法定义向量:

std::vector<object type> variable_name;

我们可以声明一个整数类型的 vec 向量,如下所示。

std::vector<int> vec;

我们可以使用 push_back() 方法向这个向量添加新成员。如果您是向量的新手,你可以在官网中查找vector的应用。

什么是C++中的 std::thread

在现代C++中,一个并发支持库被设计来解决多线程操作中的问题。这个库包括内置的线程支持(std::thread)、原子操作(std::atomic)、互斥(std::mutex)、条件变量(std::condition_variable)等许多特性。

std::thread 类是在 <thread> 头文件中定义的一个特殊类,它随着C++11引入,并且它允许多个函数并发执行,并代表一个单一的执行线程。我们可以使用线程的 join() 方法等待线程完成执行。

如何在C++多线程中使用 std::thread 与 std::vector

简单地说,我们可以创建一个包含线程类类型的向量,如下所示:

std::vector<std::thread> myt; // 线程向量

现在,我们可以使用 push_back() 方法和 std::thread() 向这个线程向量添加函数,并且我们可以使用 std::threadjoin() 方法在迭代中等待每个线程完成。在这里,线程的 join() 方法等待线程完成执行。在这里,当我们调用 join 方法时,thread 对象变为 non-joinable,并且可以安全地被销毁,当线程执行完成后返回。

让我们通过一个完整的示例来看看如何结合使用 std::threadstd::vector

有没有一个完整的示例,展示如何在C++中结合使用 std::thread 与 std::vector

这里有一个完整的 std::thread 示例,使用 std::vector 在给定的 MAXN 线程中运行 myf() 函数。

#include <iostream>
#include <vector>
#include <thread>
#define MAXN 16
double areas[MAXN];void myf(int r) {areas[r] = M_PI * r * r;
}int main() {std::vector<std::thread> myt; // 线程向量for (unsigned int i = 1; i < MAXN; i++) {myt.push_back(std::thread(&myf, i)); // 向线程向量添加函数}for (auto& t : myt) {t.join(); // 连接每个线程以等待线程执行}for (unsigned int i = 0; i < MAXN; i++) {std::cout << areas[i] << ",";}system("pause");return 0;
}

在这里我们使用了 myf() 函数。请注意,您也可以使用类对象的方法、函数对象和lambda表达式。

相关文章:

C++builder中的人工智能(25):AI中的C++多线程std::thread

主要是为Ai算法中要使用到C的多线程&#xff0c;这是使用C11中的多线程std::thread。 在现代数学、物理和计算机科学中&#xff0c;优化和加速应用程序开发在编程中非常重要&#xff0c;以加快计算速度。多核心CPU和GPU通过核心和晶体管的数量得到了高度发展&#xff0c;为当今…...

RestSharp基本使用方法

关于RestSharp RestSharp is a library that allows you to make REST and HTTP calls in .NET applications. It supports serialization, parameters, async functions, and more. RestSharp是C#的一个WepApi库&#xff0c;支持通用的Web接口处理&#xff0c;支持序列化、参数…...

MySQL与Oracle对比及区别

一、比较 1、MySQL的特点 性能卓越&#xff0c;服务稳定&#xff0c;很少出现异常宕机&#xff1b; 开放源代码无版本制约&#xff0c;自主性及使用成本低&#xff1b; 历史悠久&#xff0c;社区和用户非常活跃&#xff0c;遇到问题及时寻求帮助&#xff1b; 软件体积小&#…...

NCC前端调用查询弹框

系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中&#xff0c;有个查询区域 &#xff0c;查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题&#xff0c;但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…...

【高中生讲机器学习】25. AdaBoost 算法详解+推导来啦!

创建时间&#xff1a;2024-11-08 首发时间&#xff1a;2024-11-13 最后编辑时间&#xff1a;2024-11-13 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名高一学生&#xff0c;热爱计…...

第三十七章 Vue之编程式导航及跳转传参

目录 一、编程式导航跳转方式 1.1. path 路径跳转 1.1.1. 使用方式 1.1.2. 完整代码 1.1.2.1. main.js 1.1.2.2. App.vue 1.1.2.3. index.js 1.1.2.4. Home.vue 1.1.2.5. Search.vue 1.2. name 命名路由跳转 1.2.1. 使用方式 1.2.2. 完整代码 1.2.2.1. main.js 1…...

vue 版本升级

Vue 3.4 升级了组件产值方式 v-model &#xff0c;果断升级玩玩&#xff0c;记录一下升级过程 我的原Vue版本是3.2.13 升级到目前最新3.5.12 1. npm add vuelatest 2. npm add -g vue/clilatest 安装完成后记得查看是否有如下警告 这个警告是说eslint-plugin-vue package…...

探索Copier:Python项目模板的革命者

文章目录 **探索Copier&#xff1a;Python项目模板的革命者**1. 背景介绍&#xff1a;为何Copier成为新宠&#xff1f;2. Copier是什么&#xff1f;3. 如何安装Copier&#xff1f;4. 简单库函数使用方法4.1 创建模板4.2 从Git URL创建项目4.3 使用快捷方式4.4 动态替换文本4.5 …...

云原生后端深度解析

云原生后端 云原生后端是指专门为云计算环境设计的软件架构和服务。它强调了应用程序的设计、开发、部署和运维的方式&#xff0c;以充分利用云平台提供的弹性、可伸缩性和自动化能力。云原生技术主要包括容器化、微服务、不可变基础设施、声明式APIs等核心概念。下面是对这些…...

本地 SSL 证书生成神器,自己创建SSL

本地 SSL 证书生成神器,自己创建SSL 在本地环境中配置HTTPS一直以来是开发者的痛点,手动创建SSL证书、配置信任存储不仅繁琐,还容易出错。今天给大家介绍一个开源神器——mkcert!它能让你快速生成本地受信任的SSL/TLS证书,轻松打造安全的HTTPS开发环境,成为许多开发者的首…...

HCIP-快速生成树RSTP

一、RSTP是什么 STP&#xff08;Spanning Tree Protocol &#xff09;是生成树协议的英文缩写。该协议可应用于环路网络&#xff0c;通过一定的算法实现路径冗余&#xff0c;同时将环路网络修剪成无环路的树型网络&#xff0c;从而避免报文在环路网络中的增生和无限循环。 RS…...

企业级RAG(检索增强生成)系统构建研究

— 摘要 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;技术已经成为企业在知识管理、信息检索和智能问答等应用中的重要手段。本文将从RAG系统的现状、方法论、实践案例、成本分析、实施挑战及应对策略等方面&#xff0c;探讨企业如何…...

MATLAB基础应用精讲-【数模应用】Google Caffeine算法

目录 前言 算法原理 Caffeine算法的背景和优势 什么是Caffeine算法 Caffeine算法的工作原理 常见的缓存数据淘汰算法 FIFO LRU LFU W-TinyLFU Caffeine W-TinyLFU 实现 元素驱逐 元素访问 Caffeine 的四种缓存添加策略 1. 手动加载 2. 自动加载 3. 手动异步加载…...

第十九届中国国际中小企业博览会将在粤开展

11月15日-18日&#xff0c;第十九届中国国际中小企业博览会&#xff08;简称“中博会”&#xff09;将在广州广交会展馆举办&#xff0c;共设8个展厅&#xff0c;展位总数约2800个&#xff0c;将举办超过30场系列配套活动&#xff0c;35个国家&#xff08;地区&#xff09;和国…...

云计算在智能交通系统中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 引言 云计算概述 定义与原理 发展历…...

b4tman / docker-squid 可快速安装运行的、容器型代理服务器 + podman

使用容器部署&#xff0c;省时省力。 使用镜像&#xff0c;目前的最大麻烦就是之前各大镜像源纷纷关闭&#xff0c;需要自己找到合适的、安全的镜像源。 幸好 docker-squid 推广在 ghcr.io&#xff0c;目前下载没有障碍。 注&#xff1a;ghcr.io 是 GitHub Container Registry …...

脉冲神经网络(Spiking Neural Network,SNN)学习(1)

目录 一、神经网络 1、神经元 2、激活函数 &#xff08;1&#xff09;常见的激活函数&#xff1a;Sigmoid函数 &#xff08;2&#xff09;常见的激活函数&#xff1a;ReLU&#xff08;Rectified Linear Unit&#xff09;函数 &#xff08;3&#xff09;常见的激活函数&…...

【疑难杂症】电脑休眠后无法开机,进入 steamVR 时电脑突然黑屏关机

问题描述 1.电脑休眠后无法启动&#xff0c;只能拔电源再启动 2.进入 steamVR 时&#xff0c;电脑突然断电黑屏关机&#xff08;无蓝屏&#xff0c;无任何报错&#xff09; 3.在进行渲染时&#xff0c;如R23等&#xff0c;电脑突然黑屏关机 4.进入 VRChat 时&#xff0c;准备进…...

HTML文件中引入jQuery的库文件

方法一&#xff1a; 1. 首先&#xff0c;在官方网站(https://jquery.com/)上下载最新版本的jQuery库文件&#xff0c;通常是一个名为jquery-x.x.x.min.js的文件。 2. 将下载的jquery-x.x.x.min.js文件保存到你的项目目录中的一个合适的文件夹中&#xff0c;比如将它保存在你的项…...

IntelliJ IDEA超详细下载安装教程(附安装包)

目录 IDEA的简单介绍一、下载IDEA二、安装IDEA三、启动IDEA并使用1.配置IDEA2.输出&#xff1a;"Hello World&#xff01;" IDEA的简单介绍 IDEA 全称IntelliJ IDEA&#xff0c;是由 JetBrains 开发的一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#x…...

可解释AI在宏基因组学中的应用:从黑箱预测到透明洞察

1. 项目概述&#xff1a;当宏基因组学遇见可解释AI如果你在生物信息学或精准医疗领域工作&#xff0c;最近几年一定被两个词刷屏了&#xff1a;一个是“宏基因组学”&#xff0c;另一个是“可解释AI”。前者让我们得以窥见人体内万亿微生物构成的复杂宇宙&#xff0c;后者则试图…...

事件相机预处理芯片:基于混合内存计算的图像恢复与区域提取

1. 项目概述&#xff1a;为事件相机打造一颗“聪明”的本地大脑如果你接触过机器人、自动驾驶或者智能监控&#xff0c;大概率听说过“事件相机”&#xff08;Event-based Camera&#xff09;&#xff0c;或者更学术一点的名字——神经形态视觉传感器。和咱们手机里每秒拍几十张…...

全方位强化 AI 逆向能力,这款 Skill 太实用了

让 Codex 默认支持 JS 逆向Codex GPT-5.4 默认对逆向和爬虫类请求比较保守&#xff0c;常见表现是只讲原则&#xff0c;不继续落地。市面上的常规做法是先发提示词&#xff0c;我这边因为每次重复发送比较麻烦&#xff0c;所以进一步封装成了 Skill&#xff0c;实际验证可行。…...

安全打底・能力拉满:我的 OpenClaw 龙虾生态 Skill 清单

2026开年AI圈两大热词&#xff1a;龙虾&#xff08;OpenClaw&#xff09;、Skill插件。龙虾是短期流量话题&#xff0c;热度来得快去得快&#xff1b;而Skill插件可一次部署、长期复用&#xff0c;真正落地到日常办公、协作、社交场景。 市面多数Skill推荐内容堆砌命令、实用性…...

2026最新Burp Suite安装配置指南:Java环境、系统兼容性与代理调试

1. 为什么2026年还在手把手教Burp Suite安装&#xff1f;这不是过时的工具&#xff0c;而是安全测试的“瑞士军刀”很多人看到“Burp Suite安装教程”第一反应是&#xff1a;这玩意儿不是十年前就烂大街了吗&#xff1f;配个Java环境、下个JAR包、双击运行——三步搞定&#xf…...

昇腾CANN manifest:仓库清单与版本管理实战

55 个独立仓库&#xff0c;每个仓库独立迭代——CANN 8.0 里的 ops-transformer 是哪个 commit&#xff1f;hccl 是 v2.1.3 还是 v2.2.0&#xff1f;runtime 和 driver 的版本是否兼容&#xff1f;manifest 仓库用一份 XML 格式的清单文件回答了所有这些问题。它是 CANN 发行版…...

为ClaudeCode配置Taotoken作为备用API解决访问限制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为ClaudeCode配置Taotoken作为备用API解决访问限制 基础教程类&#xff0c;指导经常遇到ClaudeCode访问限制的开发者&#xff0c;如…...

Arm开发中DSTREAM调试探针无法识别的排查指南

1. DSTREAM调试探针在Arm开发环境中不可选的排查指南当使用Arm Development Studio&#xff08;Arm DS&#xff09;进行嵌入式开发时&#xff0c;DSTREAM系列调试探针&#xff08;包括DSTREAM-ST、DSTREAM-PT、DSTREAM-HT和DSTREAM-XT&#xff09;偶尔会出现无法在开发环境中被…...

AI 调研平台,以智能技术重构全域调研数字化体系

在各行各业的业务研判、市场分析、工作调研场景中&#xff0c;传统调研模式长期依赖人工采集、手动整理、经验分析&#xff0c;存在明显的技术与效率短板。人工调研数据来源零散、数据清洗繁琐、分析维度单一&#xff0c;不仅耗费大量人力时间&#xff0c;还容易出现数据遗漏、…...

12点标定

12点标定九点标定和十二点标定转换本质是两个平面二维空间的转换两个平面的二维空间的转换公式X物理 X图像200 k * 2 k缩放系数 k2/2000.01剪切图像是一个标准的二维平面空间物理世界&#xff0c;某个固定高度的平面物理空间 高度为5的&#xff0c;板子的所在的物理平面空间…...