解锁std :: unique_lock而不破坏它

时间:2015-07-18 00:04:52

标签: stl thread-synchronization

如果创建如下所示的unique_lock,我可以解锁它而不会破坏或超出范围吗?换句话说,这是安全/可接受的吗?

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!

1 个答案:

答案 0 :(得分:0)

这是安全且可接受的,调用boost会解锁互斥锁并让unlock()忘记它,以便它不会在dtor中再次解锁。

话虽如此,在大多数情况下,范围界定是可取的,因为如果函数/范围很长并且unique_lockunlock或其他条件结构中,那么读者可能很难遵循