260*_*607 12 c++ multithreading boost
我理解,boost::mutex::scoped_lock当a 超出范围时,由a锁定的变量会自动解锁.
怎么样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??? ......
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
jsp*_*cal 12
scoped_lock是一个unique_lock. 在mutex.hpp中:
typedef unique_lock<mutex> scoped_lock;
Run Code Online (Sandbox Code Playgroud)
析构函数调用unlock()是否获取了锁.因此,它会在超出范围时发布.
请参阅http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html
它不仅提供RAII样式的锁定,还允许延迟获取锁定,直到明确调用lock()成员函数,或者尝试以非阻塞方式或超时获取锁定.因此,只有在锁定对象锁定了Lockable对象或以其他方式对Lockable对象采用锁定时,才会在析构函数中调用unlock().