目前正在研究std::mutex
,并希望得到一些帮助。如果我有一个代码看起来-
....
if(returnBoolValue())
{
std::lock_guard<std::mutex> lock(mutex_var);
....
....
}
....
std::lock_guard
是否在if条件内保护返回值的函数?即。returnBoolValue()
如果可能的话,我应该如何改进它,以便函数调用也在护栏内呢?
std::mutex
- http://en.cppreference.com/w/cpp/thread/mutexstd::lock_guard
- guard发布于 2016-09-05 12:48:53
目前,不添加另一个作用域是不可能做到这一点的(C++17有一种方法可以这样做)
一个解决办法是
....
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
....
C++ 17 way:
....
if(std::lock_guard<std::mutex> lock(mutex_var); returnBoolValue())
{
....
....
}
....
发布于 2016-09-05 12:50:00
锁保护在构建互斥锁时锁定它:也就是说,当程序的控制流到达lock
的声明时。当保护被破坏时,它释放(解锁)互斥,当控制流经}
终止当时的块时(要么自然地通过那里,要么通过return
、throw
或跳转语句“强制”)。
当然,这也展示了如何扩展由互斥体“保护”的范围:扩展lock
变量的作用域:
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
请注意,我在"lock
+ if
“对周围添加了一个额外的块,以确保互斥锁在if
-block完成后立即解锁。
发布于 2016-09-05 12:44:52
std::lock_guard是否在if条件内保护返回值的函数?即。returnBoolValue()
不是的。关键部分开始于警卫的声明点。守卫是在条件之后宣布的,所以没有守卫。
我应该如何改进它
如果您也需要保护条件,那么在If语句之前移动守卫。
https://stackoverflow.com/questions/39330745
复制相似问题