在不破坏的情况下解锁 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 很长并且 unlock
在 if
或其他条件结构中,则可能很难reader 跟随。
如果如下创建一个 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 很长并且 unlock
在 if
或其他条件结构中,则可能很难reader 跟随。