我知道被boost::mutex::scoped_lock
锁定的变量在范围之外时会自动解锁。boost::unique_lock
怎么样,当变量超出范围时,它会自动解锁吗?
任何人都可以为该功能提供引用。
double x;
boost::mutex x_mutex;
void foo()
{
{
boost::unique_lock<boost::mutex> lock(x_mutex);
x = rand();
}
...... some calculation which takes 10 second ......
...... is x still locked here??? ......
}
谢谢。
最佳答案
scoped_lock
是unique_lock
。 在Mutex.hpp中:
typedef unique_lock<mutex> scoped_lock;
如果获得了锁,则析构函数将调用
unlock()
。因此,它将在超出范围时释放。参见http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html