gpt4 book ai didi

c++ - 在新范围内使用 unique_lock 是否等同于在共享资源工作结束时解锁调用?

转载 作者:太空狗 更新时间:2023-10-29 20:01:49 31 4
gpt4 key购买 nike

当开发人员在新范围内使用 std::unique_lock 自动解锁互斥量时,我看到了很多代码示例:

...
// do some staff
{
std::unique_lock<std::mutex> lock(shared_resource_mutex);
// do some actions with shared resource
}
// do some staff
...

在我看来,以这种方式使用 std::unique_lock API 中的方法 unlock 来实现此行为会更好:

...
// do some actions
std::unique_lock<std::mutex> lock(shared_resource_mutex);
// do some actions with shared resource
lock.unlock();
// do some actions
...

这两个代码片段是否等价?开发人员出于什么目的使用第一个变体?也许是为了强调(使用括号)不能并行执行的代码?

最佳答案

当对象在作用域结束时被销毁,锁被释放。这就是 RAII 的重点。

使用 RAII 的好处是您不会忘记解锁,并且无论您如何离开范围都无关紧要。例如,如果抛出异常,锁仍将被释放。

如果您只需要在构建时锁定并在销毁时解锁,那么std::scoped_lock是一个更简单/更适合使用的类。

关于c++ - 在新范围内使用 unique_lock 是否等同于在共享资源工作结束时解锁调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51683326/

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