gpt4 book ai didi

c++ - 返回 protected 数据时如何使用lock_guard

转载 作者:太空狗 更新时间:2023-10-29 23:18:44 36 4
gpt4 key购买 nike

我有一个关于 boost::lock_guard(或类似作用域锁)的使用以及在 return 语句中使用应该受锁保护的变量的问题。

销毁本地对象和复制返回值的顺序是怎样的?返回值优化对此有何影响?

例子:

Data Class::GetData()
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
return this->mData;
}

这是否正确(如果 mData 是受 mMutex 保护的变量)?或者我是否必须使用局部作用域和临时作用域,如下例所示:

Data Class::GetData()
{
Data ret;
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
ret = this->mData;
}
return ret;
}

最佳答案

在您的第一个示例中直接返回是正确的。返回值在局部变量被销毁之前构建,因此在锁被释放之前构建。

关于c++ - 返回 protected 数据时如何使用lock_guard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025523/

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