gpt4 book ai didi

c++ - 基于范围的锁守卫和返回值的时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:12 24 4
gpt4 key购买 nike

class C {
mutable std::mutex _lock;
map<string,string> deep_member;
public:
auto get_big_lump()
{
std::unique_lock<std::mutex> lock(_lock); // establish scope guard
return deep_member; // copy the stuff while it can't be changed on another thread.
}
};

守卫和返回值复制的保证时间是什么时候? 是否会在持有锁时进行复制,或者在允许(或实际!)优化的情况下,是否可以在函数体返回后完成一些复制?

最佳答案

局部对象的所有析构函数在函数体终止后被调用。 return 语句是函数体的一部分,因此可以保证在执行复制时保持锁。

优化不会改变这一事实,它们只会改变拷贝的目的地——它可以是中间临时目的地,也可以是调用站点上的真实目的地。锁只存在于第一个拷贝,无论它被发送到哪里。

但是,请记住代码中的实际作用域锁是不正确的。您需要 lock_guard - 但它可能只是一个演示复制粘贴错误,真正的代码有真正的保护措施。

关于c++ - 基于范围的锁守卫和返回值的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34731298/

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