C++ Thread多线程并发记录(3)线程创建总结

1.启动线程传递全局函数

#include <iostream>
#include <thread>void Th1(int id){std::cout << "Create global fun. id = " << id << std::endl;
}
void TH1(const int &id){std::cout << "Create global fun. id = " << id << std::endl;
}int main() {std::thread th1(Th1, 1);const int &num = 2;std::thread th2(Th1,std::ref(num));th1.join();//等待子线程结束后汇聚,注意同一个thread对象join两次会产生未定义行为th2.join();//th2.detach();//detach方法将线程变为守护进程,有可能出现主线程结束后,子线程还未结束的情况,故而不要使用detach线程访问栈内存return 0;
}

2.启动线程传递类成员函数

#include <iostream>
#include <string>
#include <thread>class TH1{
public:void print(){std::cout << name << std::endl;}std::string name{};
};
class TH2{
public:void operator()(std::string name) {std::cout << name << std::endl;}
};int main() {TH1 t1;t1.name = "this is thread 1.";std::thread th1(&TH1::print, &t1);//传递类成员函数地址以及类实例地址std::thread th2((TH2()), "this is thread 2.");th1.join();th2.join();return 0;
}

3.传递Lambda表达式

#include <iostream>
#include <string>
#include <thread>int main() {std::string name{"This is thread 1."};std::thread t1([](const std::string &s){ std::cout << s << std::endl; }, std::ref(name));t1.join();return 0;
}

4.Thread RAII管理线程

#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include <thread>class Thread_join {
public:Thread_join() = default;virtual ~Thread_join() = default;virtual void start() {thread_ = std::thread(&Thread_join::do_something, this); //传入基类指针产生动态绑定,根据动态类型选择虚函数类型};virtual void wait(){if (thread_.joinable())thread_.join();}
protected:std::thread thread_; //使用智能指针管理thread需要自定义virtual void do_something() = 0; //类中方法声明为纯虚函数
};class TH1 : public Thread_join {
public:void do_something() override {for (const auto &i : s)std::cout << i << " ";}
private:std::vector<std::string> s{"This", "is", "thread", "RAII"};
};int main() {TH1 t;t.start();t.wait();return 0;
}
#include <iostream>
#include <string>
#include <vector>
#include <thread>class Thread_join {
public:Thread_join() = default;virtual ~Thread_join(){if (thread_.joinable())thread_.join();}virtual void start() {thread_ = std::thread(&Thread_join::do_something, this); //传入基类指针产生动态绑定,根据动态类型选择虚函数类型};virtual void wait(){if (thread_.joinable())thread_.join();}
protected:std::thread thread_; //使用智能指针管理thread需要自定义virtual void do_something() = 0; //类中方法声明为纯虚函数
};class TH1 : public Thread_join {
public:~TH1() override{if (thread_.joinable())thread_.join();}void do_something() override {for (const auto &i : s)std::cout << i << " ";}
private:std::vector<std::string> s{"This", "is", "thread", "RAII"};
};int main() {TH1 t;t.start();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件质量保障复习

注&#xff1a;&#xff08;红色字体是作业题&#xff09; 一、软件全方位缺陷检测 1.什么是软件&#xff1f; 2.什么是软件质量&#xff1f; 3.什么是软件缺陷&#xff1f; 4.软件缺陷有哪些类型&#xff1f;&#xff08;软件缺陷的表现&#xff09; 5.为什么需要软件全…

leetcode74搜索二维矩阵

题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 fa…

推荐系统三十六式学习笔记:原理篇.内容推荐|04|画鬼容易画人难:用户画像的“能”和“不能”

目录 什么是用户画像&#xff1f;用户画像的关键因素用户画像构建的方法总结&#xff1a; 今天我来跟你聊一聊用户画像那些事。 什么是用户画像&#xff1f; 用户画像对应的英文是User Profile ,它原本用于营销领域。营销人员需要对营销的客户有更精准的认识&#xff0c;从而能…

NeuralForecast 推理 - 最简单的推理方式

NeuralForecast 推理 - 最简单的推理方式 flyfish 最简单的保存和加载模型代码 import pandas as pd import numpy as npAirPassengers np.array([112.0, 118.0, 132.0, 129.0, 121.0, 135.0, 148.0, 148.0, 136.0, 119.0],dtypenp.float32, )AirPassengersDF pd.DataFram…

培养核心人才,落实IPD体系

IPD体系已经成为业界公认的研发管理优秀框架与实践&#xff0c;不过在企业范围内&#xff0c;真正落实IPD体系、并且取得收益&#xff0c;却并非一件容易的事情&#xff0c;流程体系建立好了&#xff0c;却发现找不到合适人员去落实&#xff0c;任命了相关团队和成员&#xff0…

大文件上传处理:分卷压缩

大文件上传处理&#xff1a;分卷压缩 大文件上传处理&#xff1a;分卷压缩1、分卷压缩&#xff08;1&#xff09;Bandizip压缩工具&#xff1a;&#xff08;2&#xff09;分卷压缩后&#xff1a; 2、分卷压缩解压3、解压缩工具下载 大文件上传处理&#xff1a;分卷压缩 1、分卷…

第 400 场 LeetCode 周赛题解

A 候诊室中的最少椅子数 计数&#xff1a;记录室内顾客数&#xff0c;每次顾客进入时&#xff0c;计数器1&#xff0c;顾客离开时&#xff0c;计数器-1 class Solution {public:int minimumChairs(string s) {int res 0;int cnt 0;for (auto c : s) {if (c E)res max(res, …

i.MX8MP平台开发分享(TMU功能介绍篇)

概述 温度监控单元&#xff08;TMU&#xff09;监控并报告来自一个或多个芯片上远程温度测量点的温度。温度管理单元的特性&#xff1a; 温度测量范围&#xff1a;-40至105C。监控功能&#xff1a; 单点或多点监控超出范围指示高/低温度范围监控即时和平均温度监控可编程低通…

为什么住宅代理在负载测试中表现良好?

住宅代理在负载测试中表现好源于其独特的优势&#xff0c;尤其是在模拟真实条件下评估系统性能方面。无论是 Web 应用程序、服务器还是其他在线服务&#xff0c;它们都需要面对来自不同地理位置和不同网络条件的用户请求。在本文中&#xff0c;我们将深入探讨为什么驻地代理是负…

PS插件一键轻松搞定电商产品摄影图!

在电商行业中&#xff0c;一张高质量的产品摄影图往往能够吸引更多潜在消费者的目光&#xff0c;从而增加产品的销量。然而&#xff0c;对于许多电商卖家和摄影师来说&#xff0c;后期处理产品图片却是一个既耗时又费力的工作。 最近我发现一款PS插件可以一键生成电商产品摄影…

Day07 待办事项功能页面设计

​ 当前章节待办事项页面设计最终效果图: 一.布局设计 整个 待办事项页面 主要分上下布局,也就是分2行进行设计。第1 行 放搜索框和添加待办按钮,第2行 放置待办事项的内容。 那么 在视图中,怎么将页面分上下2行?就使用到Grid中 的 Grid.RowDefinitions ,就能实现将页面分…

Codeforces Round 950 (Div. 3) A B

A. Problem Generator time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: standard output Vlad is planning to hold m m m rounds next month. Each round should contain one problem of difficulty levels ‘A’, ‘B’…

Spring Cloud系列——使用Sentinel进行微服务保护

文章目录 一、引言1. 雪崩问题的产生原因2. 解决雪崩问题的思路 二、微服务保护1. 服务保护方案1.1 请求限流1.2 线程隔离1.3 服务熔断 2. Sentinel2.1 安装2.2 微服务整合2.2.1 请求限流2.2.2 线程隔离①OpenFeign整合Sentinel②配置线程隔离 2.2.3 服务熔断①编写降级逻辑②配…

计算机网络学习记录 网络层 Day4(下)

计算机网络学习记录 网络层 Day4 &#xff08;下&#xff09; 你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我…

【数据结构】双向带头(哨兵位)循环链表 —详细讲解(赋源码)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前面介绍单向不带头&#xff08;哨兵位&#xff09;链表&#xff0c;双向相比于单向而言&#xff0c;存贮&#xff0c;查找&#xff0c;会更加便利。 前言 双向循环列表是一种特殊的数据结构&#xff0c;它结合了双向链表…

MySQL 存储过程(一)

本篇主要介绍MySQL存储过程的相关内容 目录 一、什么是存储过程&#xff1f; 二、基本语法 创建存储过程 调用存储过程 查看存储过程 删除存储过程 三、变量 系统变量 用户自定义变量 局部变量 四、存储过程的参数 in out inout 一、什么是存储过程&#xff1f…

摄像头对人脸进行性别和年龄的判断

摄像头对人脸性别和年龄判断 导入必要的库加载预训练的人脸检测模型加载预训练的性别和年龄识别模型定义性别和年龄的标签列表打开摄像头从摄像头读取一帧转换为灰度图像检测人脸遍历检测到的人脸显示视频流按 ‘q’ 或点击窗口的“”退出循环释放摄像头和销毁所有窗口全部代码…

python中的while循环

没有循环时&#xff0c;想打印0-100之间的数字&#xff0c;则需要循环多次&#xff0c;例&#xff1a; print(0) print(1) print(2) print(3) ... print(99) 但是使用循环的话&#xff0c;就不会有那么麻烦 while 循环 while 这个单词有“在……时”的含义&#xff0c;whil…

【UnityShader入门精要学习笔记】第十七章 表面着色器

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 表面着色器…

2024年手机能做的赚钱软件有哪些?整理了八个手机能做的正规赚钱软件分享

在这个指尖滑动的时代&#xff0c;手机不仅仅是通讯工具&#xff0c;更是我们探索财富的钥匙。你是否曾幻想过&#xff0c;躺在沙发上&#xff0c;轻轻一滑&#xff0c;就能让钱包鼓起来&#xff1f; 今天&#xff0c;就让我们一起来探索那些隐藏在手机里的赚钱秘笈&#xff0c…