是否有任何常见的惯例或规则可以避免程序中的死锁? 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. C# - 如何避免使用TcpClient死锁?
- 6. 如何避免数据库死锁
- 7. 如何避免这些死锁?
- 8. Linux内核如何避免死锁?
- 9. 如何在postgresql中使用咨询锁时避免死锁
- 10. 抢先避免死锁
- 11. 避免死锁示例
- 12. 避免死锁 - 过程
- 13. 避免死锁MySQL/UniDAC/Delphi
- 14. 如何确保锁定顺序以避免死锁?
- 15. 避免死锁和防止死锁有什么区别?
- 16. 两个条件变量,避免死锁
- 17. 删除关系时避免死锁
- 18. JDBC和死锁避免问题(基本)
- 19. 同步方法,以避免死锁
- 20. 通过信号量避免死锁?
- 21. 正确避免R/W文件死锁
- 22. 避免并发删除造成死锁
- 23. Rails 4 Racing/Concurrency。避免死锁
- 24. 如何避免这个golang程序中的死锁?
- 25. 如何避免死锁中的非唯一聚簇索引
- 26. 如何从连接表中选择时避免死锁?
- 27. 获取对两个互斥锁的锁定并避免死锁
- 28. 如何避免在MongoDB中锁定
- 29. 如何避免死锁情况插入选择更新重复?
- 30. 如何避免嵌套同步和导致的死锁
“按顺序锁定事物”是否包含在内? – 2012-08-05 10:39:10
很难限制回答“只是避免穿线”。 – 2012-08-05 10:41:35
对不起,我只是想知道我是否可以遵循一些规则来避免这些问题(例如,不要锁定这个问题)。 – user854301 2012-08-05 11:08:06