C++ std范围::锁定if块内的防护装置
目前正在学习std::mutex,希望能得到一些帮助。如果我有一个代码看起来像-C++ std范围::锁定if块内的防护装置,c++,multithreading,c++11,mutex,C++,Multithreading,C++11,Mutex,目前正在学习std::mutex,希望能得到一些帮助。如果我有一个代码看起来像- .... if(returnBoolValue()) { std::lock_guard<std::mutex> lock(mutex_var); .... .... } .... 。。。。 if(returnBoolValue()) { std::lock\u guard lock(互斥锁变量); .... .... } .... std::lock\u guard保护函数
....
if(returnBoolValue())
{
std::lock_guard<std::mutex> lock(mutex_var);
....
....
}
....
。。。。
if(returnBoolValue())
{
std::lock\u guard lock(互斥锁变量);
....
....
}
....
std::lock\u guard
保护函数是否返回if条件中的值?即返回布尔值()
如果可能的话,我应该如何改进它,使函数调用也在防护内部
-std::mutex
-std::锁紧装置
如果还需要保护条件,则将保护移到If语句之前。目前,如果不添加另一个作用域,则无法执行此操作(C++17有一种方法可以做到这一点) 解决办法是
....
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
....
。。。。
{
std::lock\u guard lock(互斥锁变量);
if(returnBoolValue())
{
....
....
}
}
....
C++17方式:
....
if(std::lock_guard<std::mutex> lock(mutex_var); returnBoolValue())
{
....
....
}
....
。。。。
if(std::lock\u guard lock(mutex\u var);returnBoolValue())
{
....
....
}
....
构建互斥锁时,锁保护会锁定互斥锁:也就是说,当程序的控制流达到lock
的声明时。当保护被破坏时,它释放(解锁)互斥锁,当控制流通过}
终止then块时,就会发生这种情况(通过自然地通过then块,或者通过返回,抛出或跳跃语句“强制”通过then块)
当然,这也说明了如何扩展互斥锁“保护”的范围:扩展lock
变量的范围:
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
{
std::lock\u guard lock(互斥锁变量);
if(returnBoolValue())
{
....
....
}
}
请注意,我在“lock
+if
”对周围添加了一个额外的块,以确保在if
-块完成后立即解锁互斥锁。互斥锁将仅保护returnBoolValue
之后的所有内容,并且仅保护if
范围内的部分。你用证明是什么意思?改善?那么如何改进呢?@Hayt我需要guard也涵盖returnBoolValue()
。对于C++17方式,您应该能够省略
部分