Как использовать lock_guard при возврате защищенных данных

У меня есть вопрос относительно использования 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;
}
20
задан Hanno S. 4 October 2010 в 15:35
поделиться