首页 > 编程语言 > 详细

C++多线程lock_guard

时间:2020-10-25 18:00:23      阅读:44      评论:0      收藏:0      [点我收藏+]

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;
}

 

C++多线程lock_guard

原文:https://www.cnblogs.com/iuyy/p/13873765.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!