首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >if块内std::lock_guard的作用域

if块内std::lock_guard的作用域
EN

Stack Overflow用户
提问于 2016-09-05 12:34:35
回答 3查看 7.5K关注 0票数 4

目前正在研究std::mutex,并希望得到一些帮助。如果我有一个代码看起来-

代码语言:javascript
运行
复制
....
if(returnBoolValue())
{
    std::lock_guard<std::mutex> lock(mutex_var);
    ....
    ....
}
....

std::lock_guard是否在if条件内保护返回值的函数?即。returnBoolValue()

如果可能的话,我应该如何改进它,以便函数调用也在护栏内呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-05 12:48:53

目前,不添加另一个作用域是不可能做到这一点的(C++17有一种方法可以这样做)

一个解决办法是

代码语言:javascript
运行
复制
....
{
   std::lock_guard<std::mutex> lock(mutex_var);
   if(returnBoolValue())
   {
      ....
      ....
   }
}
....

C++ 17 way:

代码语言:javascript
运行
复制
....
if(std::lock_guard<std::mutex> lock(mutex_var); returnBoolValue())
{
   ....
   ....
}
....
票数 10
EN

Stack Overflow用户

发布于 2016-09-05 12:50:00

锁保护在构建互斥锁时锁定它:也就是说,当程序的控制流到达lock的声明时。当保护被破坏时,它释放(解锁)互斥,当控制流经}终止当时的块时(要么自然地通过那里,要么通过returnthrow或跳转语句“强制”)。

当然,这也展示了如何扩展由互斥体“保护”的范围:扩展lock变量的作用域:

代码语言:javascript
运行
复制
{
  std::lock_guard<std::mutex> lock(mutex_var);
  if(returnBoolValue())
  {
    ....
    ....
  }
}

请注意,我在"lock + if“对周围添加了一个额外的块,以确保互斥锁在if-block完成后立即解锁。

票数 6
EN

Stack Overflow用户

发布于 2016-09-05 12:44:52

std::lock_guard是否在if条件内保护返回值的函数?即。returnBoolValue()

不是的。关键部分开始于警卫的声明点。守卫是在条件之后宣布的,所以没有守卫。

我应该如何改进它

如果您也需要保护条件,那么在If语句之前移动守卫。

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

https://stackoverflow.com/questions/39330745

复制
相关文章

相似问题

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