提高scoped_lock回报行为

boost scoped_lock return behavior

本文关键字:回报 lock scoped 提高      更新时间:2023-10-16

两个代码段是否产生相同的行为?我认为除非我缺少什么,否则它会。注意:我在任何地方都使用此指针只是为了澄清所有变量都是some_class的成员变量

int some_class::some_func()
{
    boost::scoped_lock lock(this->m_mutex);
    return this->member;
}
int some_class::some_func()
{
    this->m_mutex.lock();
    int a = this->member;
    this->m_mutex.unlock();
    return a;
}
一些

它们是如何做同样工作的,但是:这不仅仅是忘记调用unlock():当你的互斥锁被锁定时,可能会发生异常,并且你可能永远无法到达你对unlock()的调用,即使你在调用lock()和调用unlock()之间没有任何返回语句;喜欢:

m.lock() // m is a mutex
    // do something
    foo(); // If this throws an exception,that your mutex won't get unlocked
    // do something
    m.unlock()

Bur 在 scoped_lock 的情况下,scoped_lock guard的析构函数将在堆栈展开期间被调用,确保关联的互斥锁始终被释放。

假设int a = this->member;不会引发异常,情况是一样的。