У меня есть вопрос относительно использования boost::lock_guard
(или аналогичных блокировок) и использования переменных, которые должны быть защищены блокировкой в инструкции return
.Как использовать lock_guard при возврате защищенных данных
Как осуществляется уничтожение локальных объектов и копирование возвращаемого значения? Как оптимизация возвращаемого значения влияет на это?
Пример:
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;
}