写点什么

用 PostSharp 对.NET 做死锁检测

  • 2012-09-25
  • 本文字数:824 字

    阅读完需:约 3 分钟

AOP 框架 PostSharp 的开发公司 SharpCrafters 开发了一款即插即用的死锁检测工具包。只要在项目中增加一行代码,这个工具包就可以对 Mutex、Monitor、ReaderWriterLock 等大部分标准的基本锁机制进行死锁检测。

当线程等待锁超过 200 毫秒,工具包将执行一道死锁检测例程。如果检测到死锁,它会向受该死锁影响的所有线程扔出 DeadlockException。异常中详细报告了所有受影响的线程和锁,供用户分析并修复问题。

死锁检测本身并不十分困难,但需要将大量的刻板代码细致地插入到程序的各个部位。 PostSharp Threading Toolkit 使用 IL 重写技术自动地注入这些代码到锁语句周围。

有几点需要注意。PostSharp 用了十分保守的逻辑去防止误报;他们认为错误地扔出一个 DeadlockException 比一个没有被检测到的死锁更糟糕。而且,它不能用于非对称锁,例如 ManualResetEvent,、AutoResetEvent,、Semaphore 和 Barrier,因为“并不清楚哪个线程负责‘发信号’或‘释放’同步资源”。

它能处理的锁包括:

  • Mutex:WaitOne、WaitAll、Release
  • Monitor:Enter、Exit、TryEnter、TryExit(包括 C#关键字 lock;不支持 Pulse 和 Wait 方法)
  • ReaderWriterLock:AcquireReaderLock、AcquireWriterLock、ReleaseReaderLock、ReleaseWriterLock、UpgradeToWriterLock、DowngradeToReaderLock(不支持 ReleaseLock、RestoreLock)
  • ReaderWriterLockSlim:EnterReadLock、TryEnterReadLock、EnterUpgradeableReadLock、TryEnterUpgradeableReadLock、EnterWriteLock、TryEnterWriteLock、ExitReadLock、ExitUpgradeableReadLock、ExitWriteLock
  • Thread:Join

PostSharp Threading Toolkit 以 BSD 2-Clause 协议发布于 GitHub

查看英文原文 http://www.infoq.com/news/2012/09/PostSharp-Deadlock


感谢郭晓刚对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-09-25 23:172743

评论

发布
暂无评论
发现更多内容

10月份主要经济体工厂需求减弱:GEP全球供应链波动指数

财见

双十一中小企业数字化转型再提速!华为云Flexus X实例降本增效有妙招

轶天下事

双十一上云超值优惠!华为云Flexus X实例让企业云服务更有性价比

平平无奇爱好科技

《Django 5 By Example》阅读笔记:p105-p164

codists

Python django

智慧联防系统(源码+文档+部署+讲解)

深圳亥时科技

创新柔性算力革新云服务体验!双十一上云就选华为云Flexus X实例

平平无奇爱好科技

加速上云跨越“数字鸿沟”!双十一云服务器首选华为云Flexus X实例

平平无奇爱好科技

洗鞋小程序(源码+文档+部署+讲解)

深圳亥时科技

双十一聚焦企业上云用云需求,华为云Flexus X实例成本更低、效率更高

轶天下事

双十一云服务器新选择!华为云Flexus X实例赋能业务高效运行

轶天下事

双十一上云有“捷径”!华为云Flexus X实例为企业上云“保驾护航

平平无奇爱好科技

上云第一步,选对云服务!双十一华为云Flexus X实例超值亮相.

平平无奇爱好科技

传统云服务弊端明显!双十一华为云Flexus X实例让上云更灵活

平平无奇爱好科技

双十一加速上云!华为云Flexus X实例助力中小企业开启数智转型

平平无奇爱好科技

双十一上云超值优惠!华为云Flexus X实例让企业云服务更有性价比

平平无奇爱好科技

一手降成本、一手抓安全!双十一华为云Flexus X实例强势赋能中小企业

平平无奇爱好科技

为中小企业量身定制的云服务器!双十一华为云Flexus X实例助力轻松上云

平平无奇爱好科技

「AI Infra 软件开源不是一个选项,而是必然」丨云边端架构和 AI Infra专场回顾@RTE2024

声网

录屏神器Camtasia2024中文永久免费版安装教程,camtasia喀秋莎汉化补丁破解版激活码

阿拉灯神丁

录屏软件 激活码生成器 后期制作 Camtasia Studio2024 视频剪辑软件下载

双十一业务如何高效迁移到云上?华为云Flexus云服务器X实例引领转型之路.

轶天下事

以柔性算力赋能中小企业,双十一华为云Flexus云服务器X实例引领高效上云

平平无奇爱好科技

什么是低代码平台,低代码平台有哪些优势

JeeLowCode低代码平台

Java核心知识体系-线程管理

不在线第一只蜗牛

Java 线程

用PostSharp对.NET做死锁检测_.NET_Jonathan Allen_InfoQ精选文章