具有范围/代码块的互斥锁/锁定

The*_*ite 0 c++ multithreading mutex standard-library c++11

我记得在某个会议上看过它,但找不到任何相关信息.

我想要的东西:

lock(_somelock)
{
    if (_someBool)
        return;

    DoStuff();
} // Implicit unlock
Run Code Online (Sandbox Code Playgroud)

代替:

lock(_somelock);
if (_someBool)
{
    unlock(_somelock);
    return;
}

DoStuff();
unlock(_somelock);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,代码变得非常臃肿,有多个早期返回.显然,人们可以制作另一个功能来处理锁定/解锁,但它更好吗?

可以使用C++ 11标准库吗?

Mar*_*ila 6

是的,您可以使用std :: lock_guard来包装互斥锁.

{
   std::lock_guard<std::mutex> lock(your_mutex);

    if (_someBool)
        return;

    DoStuff();

}
Run Code Online (Sandbox Code Playgroud)