【发布时间】:2013-11-24 07:11:51
【问题描述】:
MyClass 有一个需要返回其成员变量的成员函数,并且
该函数必须是线程安全的,所以我使用互斥锁来保护数据。
我有两个实现如下:
版本 1:
string MyClass::name() {
m_mutex.lock();
string temp = m_name;
m_mutex.unlock();
return temp;
}
版本 2:
string MyClass::name() {
MutexLocker lock(mutex);
return m_name;
}
我知道版本1没有问题,但我需要输入更多代码。
问题是,我不确定版本 2 是否正确。会不会在线程访问m_name之前释放互斥锁?
【问题讨论】:
-
既然您知道版本 2 是正确且安全的,那么我可以争辩说版本 1 可能不安全,就像在可能出现异常的情况下不受 RAII 包装器保护的任何操作一样(以及疏忽释放资源)。 RAII 版本不仅减少了键入工作量,而且还使您的代码非常安全。这就是我所说的双赢!
标签: c++ multithreading