这两个代码段是否产生相同的行为?我想是的,除非我漏掉了什么。注意:我在任何地方都使用了这个指针,只是为了说明所有变量都是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;
}发布于 2017-01-14 13:23:39
假设int a = this->member;不抛出异常,这是相同的。
发布于 2017-01-14 13:39:02
它们如何做相同的工作,但是:这不仅仅是忘记调用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()但是在scoped_lock的情况下,scoped_lockguard的析构函数将在堆栈展开期间被调用,以确保关联的互斥总是被释放。
https://stackoverflow.com/questions/41647039
复制相似问题