2012-11-07 37 views
2

我的代碼,我用C++升壓線以下行:我是否需要在Boost線程函數中調用unlock()?

void threadFunc() 
{ 
boost::mutex::scoped_lock lock(m_Mutex); 
//some code here... 
condition.notify_one(); 
} 

所以我應該叫開鎖()函數的最後一行之前,如下所示?如果我不打電話給unlock(),有什麼區別?

void threadFunc() 
{ 
boost::mutex::scoped_lock lock(m_Mutex); 
//some code here... 
lock.unlock(); 
condition.notify_one(); 
} 

回答

3

否 - scoped_lock類的一點是,該鎖是聯繫在一起的範圍 - 即當scoped_lock對象超出範圍時,鎖定被自動釋放。這可以確保(例如)如果任何中間代碼引發異常,鎖仍然會被釋放。

+0

謝謝傑裏的快速回應。然後問題是:在Boost線程中,這對互斥鎖()和unlock()幾乎沒用,因爲範圍鎖在超出範圍時會自動釋放鎖,對吧? – tonga

+0

@tonga lock()和unlock()對於不能使用scoped_lock的情況非常有用(例如鎖定一個函數並在另一個函數中解鎖)。 – Angew

+0

謝謝Angew您的意見。 – tonga

相關問題