最近解決了一個比較複雜的“死鎖”問題

老趙發表於2014-06-13

好久沒有在這裡寫文章了,今天心血來潮把剛寫的微信訊息帖上來。

前段時間公司裡的程式在極少的情況下會出現“死鎖”問題。其實也不能算是“前段時間”,因為這個問題時不時會出現一次,持續了一年多了吧,但由於出現次數很少,所以也一直沒有動力去挖出原因來。最近由於系統變得越來越複雜,使用者也越來越多,出現的頻率上升到一週一兩次,於是我們也就下決心把它解決掉。

但是這個問題實在有些麻煩,它看上去像是死鎖,但卻無法在記憶體中找到“鎖”的痕跡。最後阻塞的程式碼是在獲取“讀寫鎖”中得“讀鎖”,但此時的“寫鎖”也在當前執行緒手中,因此不該無法進入。

我在StackOverflow上詳細地描述了這個問題,也在MVP內部郵件列表裡抄送了一份,但始終沒有得到有價值的回覆。有意思的是,InfoQ首席.NET編輯Jonathan Allen也回答了這個問題,不過我並不同意他的看法……

我現在在想,其實StackOverflow是否適合稍微複雜一些的問題,因為這樣的問題往往需要深入分析,甚至需要來回補充更多資料,但大家都很忙,對於此類問題甚至沒有精力去讀完它的描述。而且高手的時間都很寶貴,放在我身上也不會願意花三個小時去解決別人的問題,我是要賣每小時1000塊錢的呢。

最後我還是自己解決了這個問題,為此我幾乎看遍了所有相關方法的內部實現。我把問題的原因和解決方案詳細地寫在了那個問題後面,還挺花了一番功夫。還好我從來不怕把一個問題講清楚,多少年部落格寫下來,早就充分鍛鍊了表達能力。

其實這也是我在工作中經常做的事情。除了開發,我經常要想辦法解決系統中的疑難雜症。我的老闆有深厚的技術背景,幾乎沒法糊弄過去,每個問題都要解釋清楚才行,因此這種大段的分析文字也經歷過不知道多少次。

點選“閱讀原文”可以跳轉至該問題及其答案。建議您耐心閱讀,要知道深入分析並解決一個問題是十分有益處的練習。最後假如您覺得有幫助,也不妨給我點個贊,謝謝。

--

歡迎關注“趙人希”公眾賬號。趙人希,老趙在技術娛樂圈的沉浮史。

qrcode

相關文章