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