我知道被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_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

10-07 13:38
查看更多