是否有任何常見的慣例或規則可以避免程序中的死鎖? CLR還是來自語言/框架的任何工具的支持來處理這種情況?如何在.NET中避免死鎖
回答
MSDN實際上有關於這一主題幾篇好文章,其中存在一種:
Avoiding and Detecting Deadlocks in .NET Apps with C# and C++
感謝您的鏈接! – user854301 2012-08-05 19:05:04
我想你去走一走問題的最佳方法是使用控制的正常過程。使用Mutexes或Semaphores保護對資源的訪問。
這可以幫助你
http://msdn.microsoft.com/en-us/library/hw29w7t1(v=vs.71).aspx
我看不出以任何方式改變了問題;這是相同的問題,但是使用操作系統管理的鎖定原語。您可以像使用互斥/信號量一樣輕鬆地實現死鎖。 – 2012-08-05 10:52:19
是的你是對的,實際上互斥和信號量是造成僵局的原因。我想避免它的唯一方法是非常好地規劃代碼訪問資源的方式。 – j0N45 2012-08-05 11:15:34
注意一點,這是.NET的具體:
避免死鎖最大的方式是鎖在一個一致的順序;這意味着你會定期阻止而不是陷入僵局,但需要對你正在鎖定什麼以及什麼時候進行多少思考和規劃。無論如何,這個想法和計劃是必要的。
實現此目的的一個簡單方法是:嘗試一次只需要一個鎖對象;因此,不是鎖定A 和 B,而是單獨鎖定A ,然後 B.這也需要思考和計劃,但通常是可以實現的。
從更一般的角度來看,避免過度鎖定可能是一個巨大的理智保護。對於可能競爭的鎖對象,請認真考慮只爲這兩個概念使用單個鎖。在很多情況下,這不會對競爭時間產生巨大影響,但會使代碼更加簡單和可靠。
實際上,我對語言的一個抱怨是「帶鎖但帶超時」是這麼多的代碼密集度比「帶鎖」要多得多。確保你總是有超時也可以確保一個總鎖變得可恢復。但是這應該主要用於識別以錯誤的順序鎖定的區域,以便您可以修復它們。
我很感謝你的回答。 – user854301 2012-08-05 19:07:17
- 1. 如何避免mysql死鎖?
- 2. 如何避免死鎖條件
- 3. 交易 - 如何避免死鎖?
- 4. 如何避免數據庫死鎖
- 5. 如何避免這些死鎖?
- 6. 搶先避免死鎖
- 7. 避免死鎖和防止死鎖有什麼區別?
- 8. JDBC和死鎖避免問題(基本)
- 9. 避免併發刪除造成死鎖
- 10. Rails 4 Racing/Concurrency。避免死鎖
- 11. 如何避免這個golang程序中的死鎖?
- 12. 獲取對兩個互斥鎖的鎖定並避免死鎖
- 13. 如何避免經常更新的表上的死鎖
- 14. 如何避免簡單更新語句的死鎖?
- 15. 如何避免嵌套同步和導致的死鎖
- 16. 如何避免這兩個SQL語句之間的死鎖?
- 17. 應該如何閱讀QLocalSocket/QDataStream以避免死鎖?
- 18. 如何避免一個容易造成死鎖?
- 19. 當升級共享到獨佔鎖時避免MySQL死鎖
- 20. 在Rails中使用ActiveJob時,如何避免數據庫發生死鎖?
- 21. 銀行家算法死鎖避免在c
- 22. 在處理大量數據時避免死鎖和超時
- 23. 避免多線程進程中的死鎖
- 24. .net中的死鎖示例?
- 25. commons net ftp死鎖?
- 26. 工作,避免鎖
- 27. 如何在PHP進程/服務器崩潰時避免文件死鎖?
- 28. 如何避免死鎖而多發的過程中SQL對同桌工作
- 29. 如何避免.NET中的InvalidCastException?
- 30. 如何避免SQLiteException鎖定錯誤
「按順序鎖定事物」是否包含在內? – 2012-08-05 10:39:10
很難限制回答「只是避免穿線」。 – 2012-08-05 10:41:35
對不起,我只是想知道我是否可以遵循一些規則來避免這些問題(例如,不要鎖定這個問題)。 – user854301 2012-08-05 11:08:06