我是否需要在Boost线程函数中调用unlock()?

时间:2012-11-07 15:17:30

标签: c++ multithreading boost

我使用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();
} 

2 个答案:

答案 0 :(得分:3)

否 - scoped_lock类的意思是锁与范围相关联 - 即,当scoped_lock对象超出范围时,锁会自动释放。这样可以确保(例如)如果任何介入代码抛出异常,锁定仍将被释放。

答案 1 :(得分:1)

没有。锁具有作用域,因此当它超出范围时会“自动”解锁。见RAII。

http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization