在不破坏的情况下解锁 std::unique_lock

unlocking std::unique_lock without destroying it

如果如下创建一个 unique_lock,我可以在不破坏或不超出范围的情况下解锁它吗?也就是说这是safe/acceptable?

std::mutex queueMutex;

// My understanding is that this locks the mutex
std::unique_lock<std::mutex> lk(queueMutex); 
{
     // My critical section
}

//  Is it unlocking it properly, or do I have to pop it from the stack?
lk.unlock();

谢谢!

这是安全和可接受的,调用 unlock() 将解锁互斥量并使 unique_lock 忘记它,因此它不会在 dtor 中再次解锁它。

话虽如此,在大多数情况下,为了可读性,范围更可取,因为如果 function/scope 很长并且 unlockif 或其他条件结构中,则可能很难reader 跟随。