锁、原子变量
当多个线程操作同一全局变量时,需要对该变量进行保护。推荐使用原子变量,当然也可以使用加锁。
原子变量,参考官方cplusplus.com/reference/atomic/atomic/,翻译C++原子变量atomic详解 - 知乎 (zhihu.com)
锁,推荐使用 std::lock_guard或std::unique_lock,实现了互斥元的RAII惯用语法(资源获取即初始化)。该对象在构造时锁定所给的互斥元,析构时解锁该互斥元,从而保证被锁定的互斥元始终被正确解锁。
unique_lock是对lock_guard的扩展,允许在生命周期内再调用lock和unlock来加解锁以切换锁的状态。
#include<iostream> #include<thread> #include<atomic> //int g_share = 0; std::atomic<int> g_share(0); //原子变量 //#include<mutex> //std::mutex g_mutex; void thread1() { //std::lock_guard<std::mutex> lck(g_mutex); //非原子变量,则需加锁 while (g_share<20) { g_share++; std::cout << "thread1 " << g_share << std::endl; } } void thread2() { //std::lock_guard<std::mutex> lck(g_mutex); while (g_share<20) { g_share++; std::cout << "thread2 " << g_share << std::endl; } } int main() { std::thread task1(thread1); std::thread task2(thread2); task1.join(); task2.join(); std::cout << "main thread end!" << std::endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-02-19 Canny,先Scharr得梯度再Canny,三通道黑色背景展示结果(OpenCV案例源码edge.cpp解读)
2020-02-19 画线、箭头、矩形、圆、文字等(OpenCV案例源码drawing.cpp解读)