2017-01-14 27 views
0

兩個代碼段是否產生相同的行爲?我認爲它確實如此,除非我有遺漏的東西。 注:我已經使用這個指針到處只是爲了澄清所有的變量都some_classboost scoped_lock返回行爲

int some_class::some_func() 
{ 
    boost::scoped_lock lock(this->m_mutex); 
    return this->member; 
} 

int some_class::some_func() 
{ 
    this->m_mutex.lock(); 
    int a = this->member; 
    this->m_mutex.unlock(); 
    return a; 
} 

回答

0

的成員變量這是相同的假設int a = this->member;不拋出異常。

+0

謝謝。同意例外說明。我會接受答案 – yaGsd

1

一些這些如何做同樣的工作,但這不僅僅是忘記呼叫unlock():當你的互斥鎖被鎖定,並且你的調用unlock()可能永遠不會被達到,即使你沒有在您的lock()和您的unlock()的調用之間有任何return語句; 喜歡:

m.lock() // m is a mutex 
    // do something 
    foo(); // If this throws an exception,that your mutex won't get unlocked 
    // do something 
    m.unlock() 

柏迪在scoped_lock的情況下,scoped_lock後衛的析構函數將棧展開過程中調用,確保相關互斥總是得到釋放。

相關問題