For this we use the RAII-style construct std::lock_guard
. When you use
std::mutex m;
{ // start of some scope
std::lock_guard lg(m);
// stuff
} // end of scope
lg
will ensure that m
will be unlocked no matter what path the scope is left as it is destroyed at scope exit and std::lock_guard
s destructor will call unlock
Even if an exception is thrown the stack will be unwound (stack unwinding) and that process destroys lg
which in turn will call unlock
guaranteeing that the lock is released.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…