首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提升scoped_lock返回行为

提升scoped_lock返回行为
EN

Stack Overflow用户
提问于 2017-01-14 13:19:54
回答 2查看 164关注 0票数 0

这两个代码段是否产生相同的行为?我想是的,除非我漏掉了什么。注意:我在任何地方都使用了这个指针,只是为了说明所有变量都是some_class的成员变量

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-14 13:23:39

假设int a = this->member;不抛出异常,这是相同的。

票数 0
EN

Stack Overflow用户

发布于 2017-01-14 13:39:02

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

代码语言:javascript
复制
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的析构函数将在堆栈展开期间被调用,以确保关联的互斥总是被释放。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41647039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档