gpt4 book ai didi

c++ - 尝试使用 C++ 中的锁进行捕获

转载 作者:IT老高 更新时间:2023-10-28 12:30:34 26 4
gpt4 key购买 nike

在 Java 中:

Lock lock = new ReentrantLock();
try{
lock.lock();
someFunctionLikelyToCauseAnException();
}
catch(e){...}
finally {
lock.unlock();
}

我的问题是,对于上面这个例子,我们知道锁总是会被解锁,因为 finally 总是会执行,但是 C++ 的保证是什么?

mutex m;
m.lock();
someFunctionLikelyToCauseAnException();
/// ????

这将如何工作以及为什么?

最佳答案

为此,我们使用 RAII-style构造 std::lock_guard .当你使用

std::mutex m;
{ // start of some scope
std::lock_guard lg(m);
// stuff
} // end of scope

lg将确保 m无论作用域离开什么路径,都将被解锁,因为它在作用域导出和 std::lock_guard 处被销毁s 析构函数将调用 unlock

即使抛出异常,堆栈也会被展开(stack unwinding),并且该进程会破坏 lg依次调用 unlock保证锁被释放。

关于c++ - 尝试使用 C++ 中的锁进行捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52206884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com