我正在尝试使my_class
线程安全。访问类数据时替代互斥锁/解锁
class my_class
{
const std::vector<double>&
get_data() const
{ //lock so that cannot get_data() while setting data
lock l(m_mutex);
return m_data;
}
void
run()
{
vector<double> tmp;
//some calculations on tmp.
{ //lock so that cannot get_data() while setting m_data
lock l(m_mutex);
m_data = tmp; //set the data
}
}
private:
std::vector<double> m_data;
mutex m_mutex;
my_class(); //non-copyable
}
run()
和get_data()
可以由不同的openmp
线程调用,所以我介绍的锁。 (由于我使用openmp,m_mutex
和lock
是围绕omp_init_lock();
等命令的RAII包装)。
但是,锁get_data()
是创建和销毁昂贵(当我剖析我的代码 - 我打电话get_data()
很多昂贵的操作)。
是否可以重新组织my_class来删除锁在get_data()
?或者这个锁是并行代码的不可避免的代价?
@sbi是的,谢谢,修复它 – Tom 2011-06-09 18:18:14