如何确保在C ++中解锁储物柜?哪种解决方案更好

how to make sure locker be unlock in c++? which solution is better

本文关键字:储物柜 解锁 更好 解决方案 何确保 确保      更新时间:2023-10-16

有两种解决方案:

一个:

lock()
try{
    action()
}catch(...)
{
    unlock()
    throw;
}
unlock()

乙:

{
LockObject lockObject;
action();
}

LockObject 的构造器将调用 lock(),其 de-construtor 将调用 unlock()。

那么什么是更好的解决方案,或者还有其他更好的解决方案吗?

PS:在Linux C++中,它终于不支持关键字了。所以我必须为这个问题做出决定。

B是一种特殊的编程习语,称为资源获取初始化(RAII),它可以应用于几种编程语言,如C++,D,Ada。

当您想要获取资源时,请使用初始化。并在析构函数中释放资源。

这是一个众所周知的成语,也是C++的好设计。事实上,C++标准库经常使用它。

例如

// global mutex
std::mutex mutex;
void f()
{
    // lock mutex
    std::lock_guard<std::mutex> lock(mutex);
    //do something might throw exception
    //...
    //do not unlock mutex, it will be unlocked by lock_guard destructor  
}