我了解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??? ......
}
感谢。
答案 0 :(得分:12)
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
它不仅提供RAII样式的锁定,它还允许延迟获取锁定,直到显式调用lock()成员函数,或者尝试以非阻塞方式获取锁定,或者使用超时。因此,只有在锁定对象锁定了Lockable对象或以其他方式锁定Lockable对象时,才会在析构函数中调用unlock()。