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; }
原文:https://www.cnblogs.com/iuyy/p/13873765.html