返回受保护数据时如何使用lock_guard

Han*_* S. 20 c++ multithreading locking thread-safety boost-thread

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

如何破坏本地对象并复制返回值?返回值优化如何影响这一点?

例:

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

这是正确的(如果mData是受mMutex保护的变量)吗?或者我是否必须使用本地范围和临时,如下例所示:

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

Ant*_*ams 23

只是在你的第一个例子中直接返回是正确的.返回值是在销毁局部变量之前构造的,因此在释放锁之前构造.