我使用C ++ Boost线程的代码行如下:
void threadFunc()
{
boost::mutex::scoped_lock lock(m_Mutex);
//some code here...
condition.notify_one();
}
所以我应该在最后一行之前调用unlock()函数,如下所示?如果我不调用unlock()会有什么区别?
void threadFunc()
{
boost::mutex::scoped_lock lock(m_Mutex);
//some code here...
lock.unlock();
condition.notify_one();
}
答案 0 :(得分:3)
否 - scoped_lock
类的意思是锁与范围相关联 - 即,当scoped_lock
对象超出范围时,锁会自动释放。这样可以确保(例如)如果任何介入代码抛出异常,锁定仍将被释放。
答案 1 :(得分:1)
没有。锁具有作用域,因此当它超出范围时会“自动”解锁。见RAII。
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization