【发布时间】:2011-04-20 21:08:46
【问题描述】:
我有一个关于使用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++ multithreading locking thread-safety boost-thread