MyClass
有一個成員函數需要返回它的'成員變量,而且這個函數必須是線程安全的,所以我用一個互斥量來保護數據。哪個會先執行,RAII還是函數返回值
我有兩個實現如下:
版本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版本不僅可以減少輸入的工作量,還可以使您的代碼非常安全。這就是我所說的雙贏! –