2011-01-11 55 views
-1

我可以在超出scoped_lock範圍之前解鎖互斥鎖嗎?我怎麼能這樣做?boost :: scoped_lock unlock

{boost::mutex::scoped_lock lock(mutex); 

if(conditionaA) 
{ 
    if(conditionB) 
    { 
    //could I unlock here as I don't want to hold the lock too long. 
    //perform calculation 
    } 

} 
else 
{ 

} 

}//lock scope 

謝謝。

+3

由於沒有閱讀文檔,因此我會加倍降低速度,因爲谷歌會將解決方案顯示爲「scoped_lock unlock」的第一個結果,因爲解鎖方法稱爲解鎖,所以三倍速率下降。 – 2011-01-11 09:35:30

回答

15

是的。

使用unlock()方法。

{boost::mutex::scoped_lock lock(mutex); 

if(conditionaA) 
{ 
    if(conditionB) 
    { 
    //could I unlock here as I don't want to hold the lock too long. 
    lock.unlock(); // <-- 
    } 

    //perform calculation 

} 
else 
{ 

} 

}//lock scope 
1

boost::mutex::scoped_lock相同boost::unique_lock<mutex>,你可以解鎖。它必須被你的線程鎖定才能做到這一點,否則你會得到一個異常。

unique_lock的析構函數可確保在銷燬時解鎖互斥鎖,因此,如果在鎖定期間拋出異常,則使用鎖定對象的目的就是爲了確保這一點(異常安全)。

相關問題