C++多线程同步

C++使用多线程必须包含头文件 #include <thread> 来实现
当多个线程同事访问一个对象的时候,会产生数据竞争现象。
这个时候,就可以加锁,同步资源,解决数据竞争。
最简单就是互斥锁mutex

上代码,计算一个数自增到1000:

#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
using namespace std;

std::mutex g_mutex;

//线程函数
void Func(int& value, int idx)
{
	while (true)
	{
		//加锁
		std::lock_guard<mutex> lock(g_mutex);
		//计算写数据
		value++;
		if (value > 1000)
		{
			cout << "Thread No." << idx << "\t Thread id: " << std::this_thread::get_id() << "\t exit" << endl;
			break;
		}
		cout << "Thread No." << idx << "\t Thread id: " << std::this_thread::get_id() << ", value:  " << value << endl;
		//线程等待5ms
		std::this_thread::sleep_for(std::chrono::milliseconds(5));
	}
}


int main()
{
	//核心数
	int nCount = thread::hardware_concurrency();

	auto t1 = std::chrono::steady_clock::now();

	int value = 1;
	vector<thread> arr;
	for (int i = 0; i < nCount; i++)
	{
		arr.push_back(thread(Func, std::ref(value), i + 1));
	}
	//主线程等待子线程结束
	for (int i = 0; i < nCount; i++)
	{
		arr[i].join();
	}

	auto t2 = std::chrono::steady_clock::now();
	int64_t ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count();
	std::cout << "time elapsed: " << ms << " ms" << std::endl;

	cin.get();
	return 0;
}

在这里插入图片描述
计算完毕,线程退出:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3d模型批量渲图总是会跳怎么办?---模大狮模型网

在进行3D模型批量渲染时&#xff0c;有时会遇到一些问题&#xff0c;其中一个常见的问题就是渲染过程中出现跳帧或者跳图的情况。这不仅会影响到效率&#xff0c;还可能导致输出结果不符合预期。本文将介绍几种解决这一问题的方法&#xff0c;帮助读者更好地应对3D模型批量渲图…

union all 以及标量子查询执行计划

SELECT 1, (SELECT ID1 FROM TE WHERE IDA.ID2) FROM .TA A WHERE COLA X UNION ALL SELECT 1, (SELECT ID2 FROM TD WHERE IDA.ID1) FROM .TB A WHERE COLA X UNION ALL SELECT 1,COL2 AS PARENT_UUID FROM .TC a WHERE COLA X 三个union all 看着像是5个table joi…

正则表达式-是什么?规则有哪些?

正则表达式&#xff08;Regular Expression&#xff0c;常简写为regex、regexp或RE&#xff09;是一种文本模式&#xff0c;包括普通字符&#xff08;如a到z之间的字母&#xff09;和特殊字符&#xff08;称为“元字符”&#xff09;&#xff0c;用于描述、匹配一系列符合某个句…

鸿蒙Ability Kit(程序框架服务)【ExtensionAbility组件】

ExtensionAbility组件 ExtensionAbility组件是基于特定场景&#xff08;例如服务卡片、输入法等&#xff09;提供的应用组件&#xff0c;以便满足更多的使用场景。 每一个具体场景对应一个[ExtensionAbilityType]&#xff0c;开发者只能使用&#xff08;包括实现和访问&#…

跨平台,不需要下载的串口调试助手

在线串口调试助手是BBAIoT旗下的首款物联网工具&#xff0c;web端显示&#xff0c;不需要下载任何软件到电脑&#xff0c;方便快捷。 在线串口调试 链接地址&#xff1a;在线串口调试在线串口调试助手 Online serial port debugging assistanthttps://www.bbaiot.com/ 软件界…

转行要趁早?2024网络安全热门岗位大盘点

2024年 热门网络安全职位排名 TOP5 热门****程度&#xff1a; 幕后默默守护的工匠&#xff01;构建安全的网络堡垒&#xff0c;跨团队合作&#xff0c;让安全防线更加坚固。 安全架构师的工作是发现企业内潜在的 IT 和网络漏洞。他们与自己团队的其他科技专业人士合作&#x…

[FreeRTOS 基础知识] 栈

文章目录 栈的概念使用C语言实现 栈通过代码反汇编解析 栈 栈的概念 所谓的栈就是一块空间的内存&#xff0c;CPU的SP寄存器指向它&#xff0c;它可以用于函数调用&#xff0c;局部变量&#xff0c;多任务系统里保存现场。 使用C语言实现 栈 volatile int num0;int fun_b(vol…

大模型ChatGLM的部署与微调

前言&#xff1a;最近大模型太火了&#xff0c;导师让我看看能不能用到自己的实验中&#xff0c;就想着先微调一个chatGLM试试水&#xff0c;微调的过程并不难&#xff0c;难的的硬件条件跟不上&#xff0c;我试了一下lora微调&#xff0c;也算跑通了吧&#xff0c;虽然最后评估…

聚类算法—DBSCAN算法

文章目录 DBSCAN算法基本概念1个核心思想&#xff1a;基于密度2个算法参数&#xff1a;邻域半径R和最少点数目minpoints3种点的类别&#xff1a;核心点&#xff0c;边界点和噪声点4种点的关系&#xff1a;密度直达&#xff0c;密度可达&#xff0c;密度相连&#xff0c;非密度相…

2024-6-3 石群电路-22

2024-6-3&#xff0c;星期一&#xff0c;20:45&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;阴转晴。今天没有发生了一些令人不开心事情&#xff0c;心情有些差&#xff0c;不过还是调整过来了&#xff0c;活好自己&#xff0c;就是对你讨厌的人最大的惩罚。因为…

jdk的组成和跨平台原理

为什么 1.笔试会用到 2. 方便理解程序的运行 java跨平台的原因&#xff1a; sun公司提供了各种平台可以使用的jvm,所以java将程序一次编译成字节码之后可以给各种平台运行。这也是java这么多年深受欢迎的原因

GB28181安防视频融合汇聚平台EasyCVR如何实现视频画面自定义标签?

安防视频融合汇聚平台EasyCVR兼容性强&#xff0c;可支持Windows系统、Linux系统以及国产化操作系统等&#xff0c;平台既具备传统安防视频监控的能力&#xff0c;也具备接入AI智能分析的能力&#xff0c;可拓展性强、视频能力灵活&#xff0c;能对外分发RTMP、RTSP、HTTP-FLV、…

Fatfs

STM32进阶笔记——FATFS文件系统&#xff08;上&#xff09;_stm32 fatfs-CSDN博客 STM32进阶笔记——FATFS文件系统&#xff08;下&#xff09;_stm32 文件系统怎样获取文件大小-CSDN博客 STM32——FATFS文件基础知识_stm32 fatfs-CSDN博客 021 - STM32学习笔记 - Fatfs文件…

IDEA配置Java远程调试,以CVE-2024-4956为例

背景 学习代码审计&#xff0c;看到一些Java的漏洞&#xff0c;想要动手调试&#xff0c;复现漏洞搭建环境可以使用docker快速创建&#xff0c;了解到Java可以远程调试&#xff0c;本文记录学习Java远程调试环境搭建的过程。 远程调试的原理 如下图&#xff08;图源&#xf…

无人值守设备远程运维,几个关键问题如何解决?

商用无人值守设备承载着很多企业的一线业务&#xff0c;它们分布广泛且数量众多&#xff0c;企业如何对这类设备实施有效的运维管理是一个重要的课题。 面对这一问题&#xff0c;很多企业选择了引入远程运维方案&#xff0c;以远程桌面为基础工具实施远程运维管理&#xff0c;…

安卓玩机搞机技巧综合资源----电脑控制手机 投屏操控的软件工具操作步骤解析【二十二】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

1、Tomcat整体架构

1、Tomcat整体架构 Tomcat介绍Tomcat概述Tomcat目录结构web应用部署的三种方式 Tomcat整体架构分析Tomcat架构图Tomcat核心组件Server 组件Service组件连接器Connector组件容器Container组件结合Server.xml理解Tomcat架构请求定位 Servlet 的过程 Tomcat架构设计精髓Connector高…

netty LengthFieldBasedFrameDecoder 根据动态长度分包粘包

如下数据格式 在方法&#xff1a; // Integer.MAX_VALUE, // maxFrameLength: 最大允许的帧长度// 4, // lengthFieldOffset: 长度字段在帧中的偏移量&#xff0c;这里是在帧头之后// 4, // lengthFieldLength: 长度字段的长度&#xff0c;4字节表示32位整数// 0, // …

常见4种时间管理方法及实施步骤(收藏版)

有效的时间管理方法&#xff0c;不仅能够保证项目按时交付&#xff0c;还能提高开发效率&#xff0c;减少成本超支和质量风险。如果缺乏明确的时间规划&#xff0c;可能会导致任务延误&#xff1b;容易造成资源分配不当&#xff0c;导致整体效率低下和成本增加。 因此有效的时间…

go语言实现微信扫码登录,涵盖微信登录超详细流程并附带时序图

微信扫码登录 1. 简述&#xff1a;此文章目的主要是web网站进行微信扫码登录2. 微信登录过程时序图3. 全部微信登录组成元素3.1. 微信扫码登录后端总共只需要两个接口&#xff0c;3.2. 微信登录的各个对象&#xff1a;3.3. 微信登录的主要参数&#xff1a; 4. 流程解释&#xf…