2012-01-04 35 views
3

是否存在遞歸鎖的用例?有沒有絕對需要遞歸鎖定的場景。遞歸鎖

似乎是複雜和危險的使用。我可以看到,我們可以避免死鎖(只要鎖棧不溢出),但我們不想捕捉這些問題。

也許我在這裏錯過了一些東西。任何指針讚賞。

在此先感謝。

回答

1

我喜歡這個博客條目的標題:

Recursive locks will kill you

我也很喜歡這句話:

http://www.thinkingparallel.com/2006/09/27/recursive-locks-a-blessing-or-a-curse/

不要使用遞歸互斥。這與使用避孕套的性行爲類似。

最後,這裏是關於遞歸鎖如何在第一時間鑽進Posix的並行線程一個非常有趣的文章:

http://groups.google.com/group/comp.programming.threads/msg/d835f2f6ef8aed99?hl=en&pli=1

遞歸互斥體是一個黑客。使用它們沒有任何問題, 但他們是一個柺杖。有斷腿或圖書館?好吧,使用 柺杖。但至少要知道你在使用柺杖,爲什麼;和 偶爾檢查一下腿(或圖書館),以確保你仍然需要拐杖 。如果不癒合,去看醫生,因爲 這只是不好。當你別無選擇時,使用柺杖時不會感到羞恥......但是你不能在柺杖上跑得很好,而且你也會放慢任何依靠你的人。

遞歸互斥體可以爲原型線程支持 在現有庫一個偉大的工具,正是因爲它可以讓你推遲硬 部分:庫的呼叫路徑和數據依賴分析。但是由於同樣的原因, ,請記住,你不是完成,直到 他們都沒有了,所以你可以產生一個你感到自豪的圖書館, 不會不必要地限制整個 應用程序的併發。

+0

謝謝。柺杖事情是有道理的,我偶然發現了一些遺留的「遺傳」代碼。 – kgunjikar 2012-01-04 01:17:41