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

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().

  • `scoped_lock`是`unique_lock <mutex>`的typedef.当到达块的末尾时,块{}中声明的自动变量被破坏,使得[RAII模式](http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization)成为可能. (5认同)