使用mutex时,如果加锁后忘记解锁,或者在使用的过程中出现异常,而没有在异常处理中解锁,那么锁会一直处于加锁状态,而无法解锁。
lock_guard类通过在对象构造的时候对mutux进行加锁,当对象离开作用域时自动解锁,从而避免加锁后没有解锁的问题:
#include#include #include using namespace std; int g_d{0}; void tFunc(mutex& m) { for(int i = 0; i < 1000000; ++i) { lock_guard l(m); //对象构造时直接对mutex加锁,对象离开作用域析构时自动对mutex解锁 g_d++; } } int main(){ mutex m; thread t1(tFunc, ref(m)); thread t2(tFunc, ref(m)); t1.join(); t2.join(); cout<



