2

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

2 回答 2

3

不——scoped_lock类的重点是锁与范围相关——即,当scoped_lock对象超出范围时,锁会自动释放。这确保(例如)如果任何中间代码抛出异常,锁仍将被释放。

于 2012-11-07T15:18:50.423 回答
1

不,锁是作用域的,所以它会在超出作用域时“自动”解锁。见 RAII。

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

于 2012-11-07T15:18:40.663 回答