zoukankan      html  css  js  c++  java
  • C++多线程lock_guard

    lock_guard可以简化lock/unlock的写法,同时也更安全,因为lock_guard在构造时会自动锁定互斥量,而在退出作用域后进行析构会自动解锁,从而保证了互斥量的正确操作,避免忘记unlock操作,因此,应尽量用lock_guard。lock_guard用到了RAII技术,这种技术在类的构造函数中分配资源,在析构函数中释放资源,保证了资源在出了作用域之后就释放。

    #include <iostream>
    #include <string>
    #include <condition_variable>
    #include <mutex>
    
    
    
    void IncreaseWithLockGuard(int *value,std::mutex *m3x){
        for (int i = 0; i < 10000; ++i) {
            std::lock_guard<std::mutex> lock(*m3x);
            *value+=1;
        }
    }
    
    void IncreaseWIthLockUnlock(int *value,std::mutex *m3x){
        for (int i = 0; i < 10000; ++i) {
            m3x->lock();
            *value+=1;
            m3x->unlock();
        }
    }
    
    int main(int argc, char *argv[]) {
        mutex m3x;
        int value = 0;
        thread th0(IncreaseWithLockGuard,&value,&m3x);
        thread th1(IncreaseWithLockGuard,&value,&m3x);
        th0.join();
        th1.join();
        cout << "value:" << value << endl;
        return 0;
    }
  • 相关阅读:
    python:HTML转义
    Python 安装 MySQLdb
    C# 获取当前路径方法
    配置 vim Python IDE 开发环境
    python:HTML转义
    Python list去重
    源码探秘
    加号的作用
    多态练习
    在web service用Cache要导入System.Web.HttpRuntime
  • 原文地址:https://www.cnblogs.com/iuyy/p/13873765.html
Copyright © 2011-2022 走看看