C++ 在异常时解锁互斥锁

C++ 在异常时解锁互斥锁,c++,exception,mutex,C++,Exception,Mutex,为了保证解锁,我必须在catch块和正常情况下调用mutex.unlock()。是否有避免重复的选择 谢谢你你要找的是一个互斥包装器,如: #包括 std::mutex\u mutex; 无效调用_foo() { std::lock\u guard lock(\u mutex); 尝试 { foo();//可以引发异常 } 捕获(…) { //互斥锁在此解锁。。。 投掷; } //…这里呢 } 当lock超出范围时,其析构函数将解锁基础互斥体\u互斥体 另请参见,此类提供了更多功能,可能会增加

为了保证解锁,我必须在catch块和正常情况下调用
mutex.unlock()
。是否有避免重复的选择


谢谢你

你要找的是一个互斥包装器,如:

#包括
std::mutex\u mutex;
无效调用_foo()
{
std::lock\u guard lock(\u mutex);
尝试
{
foo();//可以引发异常
}
捕获(…)
{
//互斥锁在此解锁。。。
投掷;
}
//…这里呢
}
lock
超出范围时,其析构函数将解锁基础互斥体
\u互斥体

另请参见,此类提供了更多功能,可能会增加一些开销。在这种情况下,一个
std::lock\u guard
就足够了。

是的,只需使用.Search搜索“RAII”,它适用于本例以外的情况。
mutex.lock();
try
{
    foo(); // can throw exception
}
catch (...)
{
    mutex.unlock();
    throw;
}
mutex.unlock();
#include <mutex>
std::mutex _mutex;

void call_foo()
{
    std::lock_guard<std::mutex> lock(_mutex);

    try
    {
        foo(); // can throw exception
    }
    catch (...)
    {
         // the mutex is unlocked here...

         throw;
    }

    // ... and here
}