目前正在研究std::mutex
并希望得到一些帮助。如果我的代码看起来像 -
....
if(returnBoolValue())
{
std::lock_guard<std::mutex> lock(mutex_var);
....
....
}
....
是std::lock_guard
守护函数,如果条件返回值?即。 returnBoolValue()
如果可能的话,我应该如何改进它以便函数调用也在内部?
std::mutex
- http://en.cppreference.com/w/cpp/thread/mutex std::lock_guard
- http://en.cppreference.com/w/cpp/thread/lock_guard 答案 0 :(得分:8)
目前,如果不添加另一个范围,就无法做到这一点(C ++ 17有办法做到这一点)
解决方案是
....
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
....
C ++ 17方式:
....
if(std::lock_guard<std::mutex> lock(mutex_var); returnBoolValue())
{
....
....
}
....
答案 1 :(得分:5)
锁定保护程序在构造时锁定互斥锁:即,当程序的控制流程达到lock
的声明时。当守卫被破坏时,它释放(解锁)互斥锁,这发生在控制流经}
终止当时阻塞时(通过自然流过那里,或者#34;强制&#34;由{ {1}},return
或跳转语句。
这当然也说明了如何扩大范围&#34; protected&#34;通过互斥锁:扩展throw
变量的范围:
lock
请注意,我在&#34; {
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
+ lock
&#34;周围添加了一个额外的块。对,以确保if
- 块完成后立即解锁互斥锁。
答案 2 :(得分:3)
是守护函数的std :: lock_guard,条件是否返回值?即。 returnBoolValue()
没有。关键部分从警卫声明开始。在条件之后宣布守卫 - 所以它没有守卫。
我应该如何改进呢
如果你需要保护条件,那么在if语句之前移动守卫。