锁、原子变量

当多个线程操作同一全局变量时,需要对该变量进行保护。推荐使用原子变量,当然也可以使用加锁。

原子变量,参考官方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;
}
复制代码

 

posted @   夕西行  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-02-19 Canny,先Scharr得梯度再Canny,三通道黑色背景展示结果(OpenCV案例源码edge.cpp解读)
2020-02-19 画线、箭头、矩形、圆、文字等(OpenCV案例源码drawing.cpp解读)
点击右上角即可分享
微信分享提示