0

If create a unique_lock as below, can I unlock it without destroying or getting out of scope? In other words is this 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();

thx!

gmmo
  • 2,577
  • 3
  • 30
  • 56

1 Answers1

0

It is safe and acceptable, calling unlock() will unlock the mutex and make the unique_lock to forget about it so it does not unlock it again in the dtor.

Having said that, scoping is preferable in most cases for readability because if the function/scope is long and unlock is inside an if or another conditional construct it might be hard for the reader to follow.

Alexander Balabin
  • 2,055
  • 11
  • 13