C++多线程同步

ops/2024/9/25 8:34:17/

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;//线程等待5msstd::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;
}

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


http://www.ppmy.cn/ops/47030.html

相关文章

Android 生成正式版密钥库 KeyStore

步骤1&#xff1a;打开生成正式版密钥库设置 点击 Build 菜单&#xff0c;选择 Generate Signed App Bundle or APK&#xff1a; 这是打开后的样子&#xff1a; 步骤2&#xff1a;选择 APK Android App Bundle 是用于上架 Google Play 商店的。 正常情况下选择 APK。 选择…

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话&#xff0c;进行 docker pull 等操作会比较慢。进入阿里云&…

FPGA基础 - 1

FPGA通用开发流程 基本流程 写一套HDL&#xff0c;使其能够在指定的硬件平台上实现相应的功能。 设计定义 &#xff08;e.g. 让LED灯每秒闪烁一次&#xff09;&#xff1b;设计输入 &#xff08;编写逻辑&#xff08;使用Verilog代码描述逻辑&#xff09;&#xff0c;或使用逻…

基于FPGA的SystemVerilog练习

文章目录 一、认识SystemVerilogSystemVerilog的语言特性SystemVerilog的应用领域SystemVerilog的优势SystemVerilog的未来发展方向 二、流水灯代码流水灯部分testbench仿真文件 三、用systemVerilog实现超声波测距计时器测距部分led部分数码管部分采样部分顶层文件引脚绑定效果…

前端科举八股文-VUE篇

前端科举八股文-VUE篇 Vue响应式的基本原理?computed和watch的区别computed和methods的区别Slot是什么 ? 作用域插槽是什么?组件缓冲keep-alive是什么&#xff1f; 讲讲原理v-if&#xff0c;v-show的区别v-modal如何实现双向绑定组件中的data属性为什么是一个函数而不是对象…

el-table的上下筛选功能

el-table的sort-change事件可以监听到筛选的事件&#xff1b; 会返回prop属性和order排序的顺序&#xff1b; html&#xff1a; <el-table :data"tableData" border style"width: 100%" :cell-style"{ textAlign: center }"header-cell-c…

代码随想录算法训练营第四十八天| km57. 爬楼梯、322. 零钱兑换、279.完全平方数

代码随想录算法训练营第四十八天 km57. 爬楼梯 题目链接&#xff1a;km57. 爬楼梯 确定dp数组以及下标的含义&#xff1a;j为背包的最大容量&#xff0c;dp[j]当容量为j有几种组合方式确定递推公式&#xff1a;dp[j]dp[j]dp[j-i]&#xff0c;不放当前数字组成目标值的种类必…

爬虫利器Frida RPC入门——夜神模拟器环境篇

Frida是一款轻量级HOOK框架&#xff0c;可用于多平台上&#xff0c;例如android、windows、ios等。 frida分为两部分&#xff0c;服务端运行在目标机上&#xff0c;通过注入进程的方式来实现劫持应用函数&#xff0c;另一部分运行在系统机器上。frida上层接口支持js、python、…