最近解決了一個比較複雜的“死鎖”問題
好久沒有在這裡寫文章了,今天心血來潮把剛寫的微信訊息帖上來。
前段時間公司裡的程式在極少的情況下會出現“死鎖”問題。其實也不能算是“前段時間”,因為這個問題時不時會出現一次,持續了一年多了吧,但由於出現次數很少,所以也一直沒有動力去挖出原因來。最近由於系統變得越來越複雜,使用者也越來越多,出現的頻率上升到一週一兩次,於是我們也就下決心把它解決掉。
但是這個問題實在有些麻煩,它看上去像是死鎖,但卻無法在記憶體中找到“鎖”的痕跡。最後阻塞的程式碼是在獲取“讀寫鎖”中得“讀鎖”,但此時的“寫鎖”也在當前執行緒手中,因此不該無法進入。
我在StackOverflow上詳細地描述了這個問題,也在MVP內部郵件列表裡抄送了一份,但始終沒有得到有價值的回覆。有意思的是,InfoQ首席.NET編輯Jonathan Allen也回答了這個問題,不過我並不同意他的看法……
我現在在想,其實StackOverflow是否適合稍微複雜一些的問題,因為這樣的問題往往需要深入分析,甚至需要來回補充更多資料,但大家都很忙,對於此類問題甚至沒有精力去讀完它的描述。而且高手的時間都很寶貴,放在我身上也不會願意花三個小時去解決別人的問題,我是要賣每小時1000塊錢的呢。
最後我還是自己解決了這個問題,為此我幾乎看遍了所有相關方法的內部實現。我把問題的原因和解決方案詳細地寫在了那個問題後面,還挺花了一番功夫。還好我從來不怕把一個問題講清楚,多少年部落格寫下來,早就充分鍛鍊了表達能力。
其實這也是我在工作中經常做的事情。除了開發,我經常要想辦法解決系統中的疑難雜症。我的老闆有深厚的技術背景,幾乎沒法糊弄過去,每個問題都要解釋清楚才行,因此這種大段的分析文字也經歷過不知道多少次。
點選“閱讀原文”可以跳轉至該問題及其答案。建議您耐心閱讀,要知道深入分析並解決一個問題是十分有益處的練習。最後假如您覺得有幫助,也不妨給我點個贊,謝謝。
--
歡迎關注“趙人希”公眾賬號。趙人希,老趙在技術娛樂圈的沉浮史。
相關文章
- 探討一個比較複雜的查詢
- 一個MySQL死鎖問題的反思MySql
- 故障解析丨一次死鎖問題的解決
- 解決Oracle死鎖問題步驟Oracle
- SQLserver 程式被死鎖問題解決SQLServer
- 一個MySQL死鎖問題的復現MySql
- 一個ORACLE死鎖問題的追蹤Oracle
- 這樣分析一個死鎖問題
- Mysql使用kill命令解決死鎖問題MySql
- 通過 sysprocesses 解決Sql死鎖問題SQL
- Oracle觸發器死鎖問題解決Oracle觸發器
- 解決了一個PC的問題
- 簡單問題複雜著解決
- 一個比較複雜的多次拆分字串的儲存過程字串儲存過程
- SQ死鎖及死鎖的解決
- Java 程式死鎖問題原理及解決方案Java
- 解決SQL2005死鎖問題SQL
- 死鎖問題排查過程-間隙鎖的復現以及解決
- 結合EM快速解決複雜的配置問題
- 最近解決的幾個DIV+CSS的問題CSS
- [golang]一個複雜的中文編碼問題Golang
- 手把手教你分析解決MySQL死鎖問題MySql
- 最近思考的一個問題
- 一個字串比較的題字串
- 終於,解決了一個大問題
- 利用函式索引解決複雜的約束問題函式索引
- MySQL死鎖問題MySql
- Python | 多執行緒死鎖問題的巧妙解決方法Python執行緒
- sqlserver大數批次update時死鎖的問題及解決方案SQLServer
- MySQL 死鎖解決MySql
- MySQL解決死鎖MySql
- sql server死鎖的問題SQLServer
- SQL Server 2000 死鎖(dead lock) 問題解決SQLServer
- 記憶體混亂及解決方法和死鎖問題記憶體
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- 從一個死鎖問題分析最佳化器特性
- oracle 鎖問題的解決Oracle
- 一些常見的並且比較難解決的設計問題