Boost Thread的boost :: unique_lock是一个范围锁吗?

时间:2012-02-29 05:38:45

标签: c++ multithreading boost

我了解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??? ......    
}

感谢。

1 个答案:

答案 0 :(得分:12)

scoped_lockunique_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()。