【原創】boost::recursive_mutex請小心使用

recursive_mutex會減少死鎖機率?恩看上去的確如此,但是事實上呢?我們從BOOST的官方邏輯去理解:

recursive_mutex類可多次進入鎖,這樣在遞歸時可以避免一次死鎖的機率,這是原本BOOST中所體現的一種思想,OK,爲什麼我們要質疑其問題。

最近項目中大量使用recursive_mutex鎖作爲主力鎖,但是奇蹟般的發現,一個遞歸函數仍然存在死鎖(已做優化,換爲mutex沒問題),一個CALL BACK也存在死鎖,OK我們的問題來了,我們其實無法使用更好的方式去排錯,因爲你不知道是哪個鎖引起的,遞歸鎖可多次鎖,同樣的需要多次解鎖,那麼問題就來了,如果真正或可能造成這次死鎖的位置在某個已經進入死鎖的地方,那麼死鎖的位置可能並不是你需要的位置,簡單的說,如果A鎖了3次,B鎖一次,C鎖一次,這樣就鎖出現死鎖,排錯之困難可想而知。

那麼從這點來看,其實recursive_mutex在使用時,我們必須特別注意使用的方式和方法,否則排錯將成爲你一直需要做的事情,太可怕了。

而且recursive_mutex並不利於代碼的優化,因爲遞歸鎖存在效率低下的問題,所以必須謹慎謹慎。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章